Guía completa de Pillow en Python: procesamiento y edición de imágenes paso a paso

目次

1. Introducción

Descripción general de Python y Pillow

Python es un lenguaje de programación muy popular entre programadores y científicos de datos gracias a su sintaxis sencilla y su amplia variedad de bibliotecas, lo que permite aplicarlo en múltiples áreas. Entre ellas, destaca Pillow (antes PIL: Python Imaging Library), una biblioteca ampliamente utilizada para el procesamiento de imágenes en Python.

Pillow es compatible con múltiples formatos de imagen como JPEG, PNG y GIF, y permite realizar operaciones como redimensionar, recortar, aplicar filtros o añadir texto. Es ampliamente usado en aplicaciones y proyectos que requieren cargar, guardar y editar imágenes.

Objetivo de este artículo

En este artículo explicaremos en detalle desde las operaciones básicas hasta técnicas avanzadas de procesamiento de imágenes con la biblioteca Pillow en Python. Veremos desde cómo abrir y guardar imágenes, hasta redimensionar, rotar, aplicar filtros, añadir texto o realizar composiciones.

Al finalizar, tendrás los conocimientos necesarios para dominar Pillow y aplicarlo de forma práctica en tus proyectos.

2. Cómo instalar Pillow

2.1 Instalación de Pillow en el entorno de Python

Para utilizar Pillow primero debes instalar la biblioteca en tu entorno de Python. La instalación es muy sencilla: basta con ejecutar el siguiente comando en la terminal (o en el símbolo del sistema en Windows):

pip install Pillow

pip es la herramienta de gestión de paquetes de Python, y al ejecutar este comando, instalará automáticamente la biblioteca Pillow. Una vez completada la instalación, podrás comenzar a trabajar con imágenes.

2.2 Verificación de la instalación

Tras instalar Pillow, es recomendable ejecutar un pequeño script para comprobar que funciona correctamente. Copia y ejecuta el siguiente código en un archivo de Python:

from PIL import Image

# Código de prueba de Pillow
img = Image.new('RGB', (100, 100), color = 'red')
img.save('test_image.png')

Este código genera una imagen roja de 100×100 píxeles y la guarda como «test_image.png». Si el archivo se crea correctamente, significa que Pillow se ha instalado y funciona correctamente.

2.3 Problemas comunes en la instalación y soluciones

A veces pueden surgir problemas durante la instalación de Pillow. Estos son algunos de los más comunes y cómo resolverlos:

  1. Versión antigua de Python
    Pillow es compatible con Python 3.x en adelante. Si utilizas una versión más antigua, la instalación puede fallar. Verifica tu versión con python --version y actualízala si es necesario.
  2. Problemas con dependencias
    Puede que falten paquetes necesarios durante la instalación. En este caso, sigue el mensaje de error e instala las dependencias faltantes, o usa la siguiente opción para instalar Pillow con dependencias actualizadas:
pip install Pillow --upgrade
  1. Configuración de variables de entorno
    En sistemas Windows, si Pillow no funciona correctamente, asegúrate de que las rutas de Python y Pip estén configuradas en las variables de entorno.

3. Carga y visualización de imágenes

3.1 Cómo cargar un archivo de imagen en Python

La carga de imágenes es uno de los pasos básicos en el procesamiento con Pillow. Para abrir un archivo de imagen utilizamos el método Image.open().

Ejemplo de código para abrir una imagen:

from PIL import Image

# Cargar el archivo de imagen
img = Image.open('sample.jpg')

# Mostrar información de la imagen
print(img.format)  # Formato (ej: JPEG, PNG)
print(img.size)    # Tamaño (ancho, alto)
print(img.mode)    # Modo de color (ej: RGB, L)

Este ejemplo abre el archivo indicado y muestra información como el formato, tamaño y modo de color.

3.2 Mostrar una imagen

Después de cargar una imagen, puedes mostrarla usando el método show(), que abre el visor predeterminado del sistema:

from PIL import Image

# Cargar la imagen
img = Image.open('sample.jpg')

# Mostrar imagen
img.show()

Con esto podrás visualizar la imagen fácilmente antes de continuar con el procesamiento.

3.3 Obtener información detallada de la imagen

Pillow permite acceder a información detallada de cada imagen. Por ejemplo, el tamaño mediante size, el formato con format y el modo de color con mode.

from PIL import Image

# Cargar la imagen
img = Image.open('sample.jpg')

# Mostrar información detallada
print(f'Tamaño: {img.size}')
print(f'Formato: {img.format}')
print(f'Modo de color: {img.mode}')

Esta información es útil para ajustar el procesamiento, como definir dimensiones al redimensionar o recortar.

3.4 Formatos de imagen soportados por Pillow

Pillow es compatible con la mayoría de formatos comunes de imagen, entre ellos:

  • JPEG
  • PNG
  • GIF
  • BMP
  • TIFF

Esto facilita trabajar con imágenes subidas por usuarios en aplicaciones web o móviles, sin preocuparse demasiado por la compatibilidad de formatos.

4. Procesamiento básico de imágenes

4.1 Redimensionar imágenes

Una de las operaciones más comunes es el redimensionado, que ajusta las dimensiones de la imagen a las necesidades de tu proyecto. Con el método resize() es sencillo cambiar el tamaño:

from PIL import Image

# Abrir imagen
img = Image.open('sample.jpg')

# Redimensionar (400x300 píxeles)
resized_img = img.resize((400, 300))

# Guardar imagen redimensionada
resized_img.save('resized_sample.jpg')

4.2 Recortar imágenes

El recorte permite extraer una parte específica de la imagen. Se realiza con el método crop():

from PIL import Image

# Abrir imagen
img = Image.open('sample.jpg')

# Recortar (coordenadas: x1=100, y1=100, x2=300, y2=300)
cropped_img = img.crop((100, 100, 300, 300))

# Guardar resultado
cropped_img.save('cropped_sample.jpg')

4.3 Rotación de imágenes

Puedes rotar una imagen fácilmente con rotate(). Si deseas que la imagen no se recorte al rotarla, utiliza el parámetro expand=True.

from PIL import Image

img = Image.open('sample.jpg')

# Rotar 45 grados
rotated_img = img.rotate(45, expand=True)
rotated_img.save('rotated_sample.jpg')

4.4 Invertir imágenes

Con el método transpose() puedes invertir imágenes horizontal o verticalmente.

from PIL import Image

img = Image.open('sample.jpg')

# Inversión horizontal
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.save('flipped_sample.jpg')

4.5 Otros procesos básicos en Pillow

Además de redimensionar, recortar, rotar o invertir, Pillow permite ajustar brillo, contraste o convertir entre espacios de color. Esto hace posible automatizar ediciones más complejas de manera sencilla.

5. Conversión y guardado de formatos de imagen

5.1 Conversión de formatos de imagen

Con Pillow es muy fácil convertir imágenes de un formato a otro. Por ejemplo, de JPEG a PNG:

from PIL import Image

# Abrir imagen JPEG
img = Image.open('sample.jpg')

# Guardar como PNG
img.save('converted_image.png', 'PNG')

5.2 Opciones al guardar imágenes

Al guardar imágenes con Pillow puedes definir parámetros como la calidad, la optimización o el uso de JPEG progresivo. Ejemplo:

from PIL import Image

img = Image.open('sample.jpg')

# Guardar como JPEG optimizado
img.save('optimized_image.jpg', 'JPEG', quality=95, optimize=True)

5.3 Guardar como JPEG progresivo

El formato JPEG progresivo mejora la experiencia en la web mostrando la imagen de forma gradual mientras se carga.

from PIL import Image

img = Image.open('sample.jpg')

# Guardar como JPEG progresivo
img.save('progressive_image.jpg', 'JPEG', quality=85, progressive=True)

5.4 Mantener metadatos EXIF

Los archivos EXIF contienen metadatos como la fecha, la cámara usada o la ubicación GPS. Pillow permite conservar esta información:

from PIL import Image

img = Image.open('sample.jpg')

# Extraer datos EXIF
exif_data = img.info.get('exif')

# Guardar manteniendo EXIF
img.save('exif_image.jpg', 'JPEG', exif=exif_data)

6. Aplicación de filtros y efectos

6.1 Ajuste de brillo y contraste

El módulo ImageEnhance facilita modificar brillo y contraste:

from PIL import Image, ImageEnhance

img = Image.open('sample.jpg')

# Aumentar brillo 1.5x
enhancer = ImageEnhance.Brightness(img)
bright_img = enhancer.enhance(1.5)
bright_img.save('bright_sample.jpg')

Para el contraste:

from PIL import Image, ImageEnhance

img = Image.open('sample.jpg')

# Aumentar contraste 2x
enhancer = ImageEnhance.Contrast(img)
contrast_img = enhancer.enhance(2.0)
contrast_img.save('contrast_sample.jpg')

6.2 Filtros de desenfoque y nitidez

Puedes aplicar desenfoque, nitidez u otros efectos con ImageFilter:

from PIL import Image, ImageFilter

img = Image.open('sample.jpg')

# Aplicar desenfoque
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.save('blurred_sample.jpg')
# Aplicar nitidez
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.save('sharpened_sample.jpg')

6.3 Filtros especiales

Pillow también incluye filtros de análisis como la detección de bordes:

from PIL import Image, ImageFilter

img = Image.open('sample.jpg')

# Detección de bordes
edge_img = img.filter(ImageFilter.FIND_EDGES)
edge_img.save('edge_sample.jpg')

7. Dibujar texto y formas

7.1 Añadir texto a imágenes

Con el módulo ImageDraw puedes insertar texto en imágenes:

from PIL import Image, ImageDraw

img = Image.open('sample.jpg')
draw = ImageDraw.Draw(img)

# Dibujar texto
draw.text((10, 10), 'Hola, Pillow!', fill=(255, 255, 255))

img.save('text_sample.jpg')

7.2 Usar fuentes personalizadas

Para definir tipografía y tamaño usa ImageFont:

from PIL import Image, ImageDraw, ImageFont

img = Image.open('sample.jpg')
draw = ImageDraw.Draw(img)

# Definir fuente
font = ImageFont.truetype('arial.ttf', 40)

# Dibujar texto con fuente personalizada
draw.text((10, 10), 'Fuente personalizada!', font=font, fill=(255, 255, 255))

img.save('font_sample.jpg')

7.3 Dibujar formas geométricas

Con ImageDraw puedes crear líneas, rectángulos o círculos:

from PIL import Image, ImageDraw

img = Image.open('sample.jpg')
draw = ImageDraw.Draw(img)

# Línea
draw.line((0, 0, 100, 100), fill=(255, 0, 0), width=5)

# Rectángulo
draw.rectangle((50, 50, 150, 150), outline=(0, 255, 0), width=3)

# Círculo
draw.ellipse((200, 200, 300, 300), outline=(0, 0, 255), width=3)

img.save('shape_sample.jpg')

7.4 Composiciones avanzadas

Combinando texto y formas puedes crear miniaturas, banners o gráficos personalizados para webs y aplicaciones.

8. Técnicas avanzadas: Composición y máscaras

8.1 Composición de imágenes

El método paste() permite combinar imágenes:

from PIL import Image

background = Image.open('background.jpg')
overlay = Image.open('overlay.png')

# Combinar en posición x=100, y=100
background.paste(overlay, (100, 100), overlay)

background.save('combined_image.jpg')

8.2 Recortes con máscara

Con máscaras puedes recortar imágenes en formas específicas:

from PIL import Image, ImageDraw

img = Image.open('sample.jpg')

# Crear máscara circular
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((100, 100, 300, 300), fill=255)

# Aplicar máscara
result = Image.new('RGB', img.size)
result.paste(img, (0, 0), mask)

result.save('masked_image.jpg')

8.3 Imágenes transparentes con canal alfa

Puedes añadir transparencia usando putalpha():

from PIL import Image

img = Image.open('sample.jpg').convert('RGBA')

# Ajustar alfa al 50%
alpha = img.split()[3]
alpha = alpha.point(lambda p: p * 0.5)
img.putalpha(alpha)

img.save('transparent_image.png')

8.4 Posibilidades avanzadas

Con estas técnicas puedes automatizar procesos de edición, diseñar banners, aplicar transparencias en logotipos o destacar secciones específicas de una imagen.

9. Conclusión

En este artículo hemos explorado en detalle las técnicas más importantes de procesamiento de imágenes con la biblioteca Pillow en Python. Desde tareas básicas como abrir, guardar, redimensionar o recortar imágenes, hasta operaciones más avanzadas como aplicar filtros, añadir texto o combinar imágenes, Pillow ofrece un amplio conjunto de herramientas fáciles de usar.

9.1 Repaso de las operaciones básicas

Comenzamos con la instalación y la carga de imágenes, aprendiendo a mostrar y obtener información básica como tamaño, formato y modo de color. Estos primeros pasos constituyen la base de cualquier flujo de trabajo de edición de imágenes en Python.

9.2 Edición fundamental: redimensionar, recortar y rotar

El redimensionado, recorte y rotación son operaciones esenciales que permiten adaptar las imágenes a distintos propósitos, ya sea para sitios web, aplicaciones o análisis de datos.

9.3 Aplicación de filtros y efectos

Con Pillow puedes ajustar brillo, contraste, desenfoque o nitidez, así como aplicar filtros especiales de detección de bordes. Estas funciones hacen posible transformar completamente la apariencia de una imagen de manera sencilla.

9.4 Dibujar texto, formas y realizar composiciones

La posibilidad de añadir texto, usar fuentes personalizadas y dibujar figuras geométricas amplía las capacidades de diseño. Además, la composición de varias imágenes y el uso de máscaras permiten crear gráficos y banners profesionales.

9.5 Próximos pasos y aplicaciones prácticas

Las funcionalidades de Pillow van mucho más allá de lo tratado aquí. Consultando la documentación oficial y otros recursos podrás aplicar Pillow en áreas como:

  • Procesamiento automatizado de imágenes en aplicaciones web.
  • Análisis de imágenes en proyectos de ciencia de datos.
  • Preprocesamiento de datos visuales en machine learning.

Con estas bases, ya estás preparado para aplicar Pillow de forma eficiente en tus proyectos, optimizando flujos de trabajo y generando contenido visual de gran calidad.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール