Genere una imagen en miniatura cuadrada o circular con Python – Pillow

Prerrequisitos: Pillow , Numpy

En la palabra “THUMBNAIL” la palabra THUMB significa corto. Una miniatura es la imagen de vista previa comprimida de la imagen original o una miniatura es la versión más pequeña de una imagen. En palabras simples, la miniatura es la imagen más pequeña que representa la imagen más grande/original. 

Por lo general, la forma de la miniatura depende de la imagen original, pero en este artículo, vamos a generar la imagen en miniatura circular y cuadrada usando la biblioteca de Pillows en Python.

Instalación:

Para instalar las bibliotecas Pillow y NumPy, escriba el siguiente comando en su símbolo del sistema.

pip install pillow
pip install numpy

Ejemplo 1: Imagen de apertura usando Biblioteca de Pillows.

Python

# importing necessary libraries
from PIL import Image
  
# opening the image from the storage using 
# Image.open() function
orig_img=Image.open('Geekwork/sebastian-molina.jpg')
  
# showing the image using show() function
orig_img.show()

Producción:

Ejemplo 2: Generación de una imagen en miniatura circular utilizando la biblioteca de Pillows.

Acercarse:

  • Convierta la imagen en una array NumPy usando la biblioteca NumPy.
  • Ahora cree una nueva imagen de máscara usando la función PIL.Image.new() pasando el modo, el tamaño de la imagen y el color, luego dibuje la imagen usando la función PIL.Image.Draw.Draw() pasando el tamaño de la nueva imagen de máscara y dejar que se almacene en la variable denominada “dibujar”.
  • Haga el círculo en la imagen de la máscara usando la función ImageDraw.Draw.peislice() pasando cuatro puntos para definir un límite, ángulo inicial = 0, ángulo final = 360 esto crea el círculo en la imagen de la máscara y con ellos pasa el parámetro de relleno para el relleno el color en una imagen.
  • Convierta la imagen de máscara en una array numpy, luego apile la array en profundidad junto con el tercer eje usando la función numpy.dstack() y pase la array de imagen original y la array de imagen de máscara como lo habíamos convertido en los pasos anteriores para obtener la imagen circular, y deje que se almacene en la variable nombrada como «npImage».
  • Como esta «npImage» está en formato de array, tenemos que convertir esta array en una imagen, esto se hace con la ayuda de la función PIL.Image.fromarray() en este paso npImage como parámetro y dejar que se almacene en la variable denominada como “imagen_final”.
  • Como habíamos generado la imagen circular.

A continuación se muestra la implementación completa:

Python

# importing necessary libraries
from PIL import Image, ImageDraw
import numpy as np
  
# opening the image from
# the storage using Image.open() function
orig_img=Image.open('sebastian-molina.jpg')
  
# getting height and width of 
# an image using size() function
height,width=orig_img.size
  
# converting image to numpy array
npImage=np.array(orig_img)
  
# Creating mask image in L mode with same image size
new_img = Image.new('L', orig_img.size,0)
  
# drawing on mask created image using Draw() function
draw = ImageDraw.Draw(new_img)
  
# making circle on mask image using pieslice() function
draw.pieslice([0,0,height,width],0,360,fill=255)
  
# Converting the mask Image to numpy array
np_new=np.array(new_img)
  
# stack the array sequence
# (original image array with mask image) depth wise
npImage=np.dstack((npImage,np_new))
  
# converting array to an image using fromarray() function
final_img = Image.fromarray(npImage)
  
# making thumbnail using thumbnail() 
# function by passing the size in it
final_img.thumbnail((500,500))
  
# saving the circular thumbnail Image
final_img.save('Circular_thumbnail.png')

Producción:

Ejemplo 3: Generación de una imagen en miniatura cuadrada utilizando la Biblioteca de Pillows.

Acercarse:

  • Verifique las tres condiciones si alto == ancho o alto> ancho o ancho> alto si la dimensión de la imagen se encuentra en cualquiera de las dos últimas condiciones.
  • Luego tenemos que crear la nueva imagen de máscara usando la función new() con el lado/dimensión más larga de la imagen.
  • Luego pegue la imagen original en la nueva imagen de la máscara usando la función pegar() y pase la imagen original con las dimensiones calculadas que discutiremos en la explicación del ejemplo.
  • Ahora obtendremos la imagen cuadrada siguiendo los pasos anteriores.
  • Ahora tenemos que generar la imagen en miniatura, podemos hacer esto usando el método PIL.Image.thumbnail() pasando el tamaño como un parámetro, luego guarde esto usando el método PIL.Image.save() y pase el nombre de la imagen con formato de imagen estándar.

A continuación se muestra la implementación completa:

Python

# importing necessary libraries
from PIL import Image, ImageDraw
import numpy as np
  
# function to generate squared image
def square_thumb(thum_img,width,height):
    
    # checking if height and width are
    # are equal then return image as it is
    if height == width:
        return thum_img
  
    # checking if height is greater than width
    elif height > width:
        
        # creating the new mask image of size i,e height of Image
        square_img = Image.new(thum_img.mode, (height, height))
          
        # pasting the original image on mask image
        # using paste() function to make it square
        square_img.paste(thum_img, ((height - width) // 2,0))
          
        # returning the generated square image
        return square_img
  
    # if width is greater than height
    else:
        
        # creating the new mask image of size i,e width of Image
        square_img = Image.new(thum_img.mode, (width, width))
          
        # pasting the original image on mask image using paste()
        # function to make it square
        square_img.paste(thum_img, (0, (width - height) // 2))
          
        # returning the generated square image
        return square_img 
  
# main function  
if __name__ == "__main__":
    
    # opening the image from the storage
    # using Image.open() function
    orig_img=Image.open('sebastian-molina.jpg')
  
    # extracting width and height of an
    # image from the image size 
    w,h = orig_img.size
  
    # calling the function by passing
    # image width and height as a parameter
    sq_img = square_thumb(orig_img,w,h)
  
    # generating square thumbnail of
    # required size using thumbnail() function
    sq_img.thumbnail((400,400))
  
    # saving the thumbnail using save function
    sq_img.save('Square_thumbnail.jpg')

Producción:

Explicación: Habíamos creado la función para generar una imagen cuadrada pasando la imagen, su ancho y alto como parámetro. En la función habíamos verificado tres condiciones en base a las cuales habíamos generado la imagen cuadrada.

  • En la primera condición, habíamos verificado si la altura de la imagen es igual al ancho o no, si era Verdadero, entonces habíamos devuelto la imagen tal como está porque cuando la altura y el ancho son iguales, las imágenes ya tienen forma cuadrada.
  • En la segunda condición, si la altura de una imagen es mayor que el ancho, entonces creamos la nueva imagen de máscara usando la función Image.new() pasando el modo de una imagen y el tamaño como si fuera la altura (es decir, altura, altura ) y pegue la imagen original en la imagen de máscara creada usando la función pegar() pasando la imagen original y la dimensión en la que se pega la imagen original en la imagen de máscara, es decir, de la dimensión calculada (restando la altura de la imagen original con un ancho de la imagen original y luego divídalo por 2) a 0, para que la imagen original se pueda pegar perfectamente en la imagen de la máscara.
  • En la tercera condición, si el ancho de una imagen es mayor que la altura, entonces hicimos el mismo proceso que hicimos en la segunda condición, pero el único cambio es que habíamos creado la imagen de máscara de tamaño ya que es el ancho ( es decir, ancho, ancho) y en caso de pegar, teníamos que pasar la imagen original y la dimensión, es decir, de 0 a la dimensión calculada (restando el ancho de la imagen original con una altura de la imagen original y luego dividiéndolo por 2) para que la imagen original se pueda pegar perfectamente en la imagen de la máscara.

Publicación traducida automáticamente

Artículo escrito por srishivansh5404 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *