Skip to main content

Pillow

¿Qué es Pillow?

Pillow es una bifurcación amigable con la comunidad de la biblioteca de imágenes Python Imaging Library (PIL), que es una biblioteca de procesamiento de imágenes para Python que permite abrir, manipular y guardar muchos formatos diferentes de archivos de imagen.

Características principales:

  1. Manipulación de imágenes: Pillow permite una amplia gama de operaciones de manipulación de imágenes, como redimensionar, recortar, rotar, ajustar el brillo y el contraste, aplicar filtros, entre otros.

  2. Formatos de archivo compatibles: Soporta una gran cantidad de formatos de archivo de imagen comunes, incluyendo JPEG, PNG, GIF, BMP, TIFF, entre otros.

  3. Compatibilidad con Python 3: Está diseñado para ser compatible con Python 3, lo que significa que puede aprovechar las últimas características del lenguaje.

  4. API intuitiva: Pillow proporciona una API limpia y fácil de usar para realizar operaciones complejas de procesamiento de imágenes con facilidad.

  5. Extensibilidad: Además de las operaciones de procesamiento de imágenes incorporadas, Pillow es extensible, lo que significa que puedes implementar tus propios filtros, efectos y herramientas de manipulación de imágenes.

  6. Licencia abierta: Pillow se distribuye bajo una licencia abierta (Python Imaging License), lo que significa que es de uso gratuito y se puede modificar según las necesidades del proyecto.

Ejemplo de uso:

from PIL import Image

# Abrir una imagen
imagen = Image.open("ejemplo.jpg")

# Mostrar información de la imagen
print(imagen.format, imagen.size, imagen.mode)

# Redimensionar la imagen
imagen_redimensionada = imagen.resize((200, 200))

# Guardar la imagen redimensionada
imagen_redimensionada.save("ejemplo_redimensionado.jpg")

Instalación:

Pillow se puede instalar fácilmente a través de pip, el administrador de paquetes de Python, ejecutando el siguiente comando:

pip install Pillow

Principales acciones

1. Abrir una imagen:

La función open() se utiliza para cargar una imagen desde el sistema de archivos. Una vez cargada, la imagen se puede manipular y procesar.

from PIL import Image

# Abrir una imagen
imagen = Image.open("imagen.jpg")

# Mostrar información de la imagen
print(imagen.format, imagen.size, imagen.mode)

2. Mostrar una imagen:

Pillow proporciona la capacidad de mostrar una imagen en una ventana emergente utilizando la función show().

from PIL import Image

# Abrir y mostrar una imagen
imagen = Image.open("imagen.jpg")
imagen.show()

3. Redimensionar una imagen:

Es posible cambiar el tamaño de una imagen usando el método resize(). Se puede especificar un nuevo ancho y alto, o un factor de escala.

from PIL import Image

# Abrir una imagen y redimensionar
imagen = Image.open("imagen.jpg")
imagen_redimensionada = imagen.resize((400, 300))

# Guardar la imagen redimensionada
imagen_redimensionada.save("imagen_redimensionada.jpg")

4. Rotar una imagen:

El método rotate() permite rotar una imagen en sentido horario. El ángulo de rotación se especifica en grados.

from PIL import Image

# Abrir una imagen y rotarla
imagen = Image.open("imagen.jpg")
imagen_rotada = imagen.rotate(90)

# Guardar la imagen rotada
imagen_rotada.save("imagen_rotada.jpg")

5. Convertir el formato de una imagen:

Pillow permite convertir el formato de una imagen de un tipo a otro utilizando el método convert().

from PIL import Image

# Abrir una imagen y convertirla a escala de grises
imagen = Image.open("imagen.jpg")
imagen_gris = imagen.convert("L")

# Guardar la imagen en escala de grises
imagen_gris.save("imagen_gris.jpg")

6. Aplicar filtros:

Pillow ofrece una variedad de filtros que se pueden aplicar a una imagen. Por ejemplo, el filtro de desenfoque Gaussiano se puede aplicar con el método filter().

from PIL import ImageFilter

# Abrir una imagen y aplicar un filtro de desenfoque
imagen = Image.open("imagen.jpg")
imagen_desenfocada = imagen.filter(ImageFilter.GaussianBlur(5))

# Guardar la imagen desenfocada
imagen_desenfocada.save("imagen_desenfocada.jpg")

7. Recortar una imagen:

Puedes recortar una parte específica de una imagen utilizando el método crop(), especificando las coordenadas de la región a recortar.

from PIL import Image

# Abrir una imagen y recortar una región específica
imagen = Image.open("imagen.jpg")
caja_recorte = (100, 100, 400, 300) # (izquierda, arriba, derecha, abajo)
imagen_recortada = imagen.crop(caja_recorte)

# Guardar la imagen recortada
imagen_recortada.save("imagen_recortada.jpg")

8. Agregar texto a una imagen:

Pillow permite superponer texto en una imagen utilizando la clase ImageDraw. Puedes especificar la fuente, el tamaño, el color y la posición del texto.

from PIL import Image, ImageDraw, ImageFont

# Abrir una imagen y agregar texto
imagen = Image.open("imagen.jpg")
draw = ImageDraw.Draw(imagen)
texto = "Ejemplo de texto"
fuente = ImageFont.truetype("arial.ttf", 36)
posicion = (50, 50)
color = (255, 255, 255)
draw.text(posicion, texto, fill=color, font=fuente)

# Guardar la imagen con texto agregado
imagen.save("imagen_con_texto.jpg")

9. Fusionar imágenes:

Pillow permite superponer una imagen sobre otra utilizando el método paste(). Puedes especificar la posición y la transparencia de la imagen que se está fusionando.

from PIL import Image

# Abrir dos imágenes y fusionarlas
imagen_fondo = Image.open("imagen_fondo.jpg")
imagen_superpuesta = Image.open("imagen_superpuesta.png")
posicion = (50, 50)
imagen_fondo.paste(imagen_superpuesta, posicion, imagen_superpuesta)

# Guardar la imagen fusionada
imagen_fondo.save("imagen_fusionada.jpg")

10. Cambiar el tamaño del lienzo:

Puedes cambiar el tamaño del lienzo de una imagen utilizando el método expand(), agregando bordes a la imagen y especificando el color de fondo.

from PIL import Image

# Abrir una imagen y expandir el lienzo
imagen = Image.open("imagen.jpg")
nuevo_ancho = 600
nuevo_alto = 400
color_fondo = (255, 255, 255) # Blanco
imagen_expandida = imagen.expand((nuevo_ancho, nuevo_alto), fill=color_fondo)

# Guardar la imagen con el lienzo expandido
imagen_expandida.save("imagen_expandida.jpg")

11. Voltear o espejar una imagen:

Puedes voltear una imagen horizontal o verticalmente utilizando el método transpose().

from PIL import Image

# Abrir una imagen y voltearla horizontalmente
imagen = Image.open("imagen.jpg")
imagen_volteada = imagen.transpose(Image.FLIP_LEFT_RIGHT)

# Guardar la imagen volteada
imagen_volteada.save("imagen_volteada.jpg")

12. Combinar varias imágenes en una sola:

Pillow permite combinar varias imágenes en una sola utilizando el método new() para crear un lienzo nuevo y luego superponer las imágenes en él.

from PIL import Image

# Crear un lienzo nuevo
lienzo = Image.new("RGB", (800, 600))

# Abrir varias imágenes y superponerlas en el lienzo
imagen_1 = Image.open("imagen_1.jpg")
imagen_2 = Image.open("imagen_2.jpg")
imagen_3 = Image.open("imagen_3.jpg")
lienzo.paste(imagen_1, (0, 0))
lienzo.paste(imagen_2, (200, 200))
lienzo.paste(imagen_3, (400, 400))

# Guardar la imagen combinada
lienzo.save("imagen_combinada.jpg")