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:
- 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 conpython --version
y actualízala si es necesario. - 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
- 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.