1. Cargar y guardar imágenes
Para cargar imágenes en Pillow se utiliza la clase Image
.
Una vez cargada, la imagen se puede transformar y guardar en varios
formatos. Vamos a revisar las operaciones básicas de carga y guardado de imágenes.
Carga de imagen
Para cargar una imagen, utiliza el método Image.open()
.
Este permite abrir una imagen de cualquier formato soportado.
from PIL import Image
# Apertura de la imagen
image = Image.open("example.jpg")
# Imprimir información del archivo
print(image.format) # Formato de la imagen, por ejemplo, JPEG o PNG
print(image.size) # Tamaño de la imagen (ancho, alto)
print(image.mode) # Modo de color, por ejemplo, RGB o Grayscale
Este código carga la imagen example.jpg
y muestra sus
características principales: formato, tamaño y modo de color. Si la imagen no
está en la misma carpeta, especifica la ruta completa al archivo.
Guardado de imagen
Después de cargar y modificar la imagen, puedes guardarla en cualquier otro
formato soportado, simplemente indicando la extensión deseada en el nombre del archivo. El método
save()
permite definir el nombre y formato del archivo de salida.
# Guardar la imagen en otro formato
image.save("example.png") # Guarda la imagen en formato PNG
También puedes modificar la calidad de la imagen para reducir el tamaño del archivo, lo que es especialmente útil para imágenes en formato JPEG.
# Guardar modificando la calidad
image.save("compressed_example.jpg", quality=85) # El valor de quality varía entre 1 y 95
2. Cambio de tamaño de imagen
Cambiar el tamaño es una de las tareas más comunes al trabajar con imágenes. Pillow ofrece varias maneras de cambiar el tamaño, incluyendo especificar parámetros exactos de ancho y alto, un cambio proporcional, y la creación de miniaturas.
Cambiar el tamaño con el método resize()
El método resize()
permite especificar el tamaño exacto de la imagen (ancho y alto), pero la imagen puede distorsionarse si las nuevas dimensiones no conservan las proporciones originales.
# Configurar nuevo tamaño
new_size = (800, 600)
resized_image = image.resize(new_size)
# Guardar la imagen redimensionada
resized_image.save("resized_example.jpg")
En este ejemplo, la imagen se redimensiona a 800x600 píxeles y se guarda como un nuevo archivo. Si la imagen original tiene otras proporciones, se estirará o comprimirá para coincidir con el nuevo tamaño.
Cambio proporcional de tamaño con thumbnail()
Para cambiar el tamaño de la imagen manteniendo sus proporciones, usa el método
thumbnail()
. Este método reduce automáticamente la imagen para que se ajuste a las dimensiones especificadas, manteniendo las proporciones originales. Es especialmente útil para crear miniaturas de imágenes.
# Crear una miniatura con tamaño máximo de 400x400 píxeles
image.thumbnail((400, 400))
# Guardar la miniatura
image.save("thumbnail_example.jpg")
El método thumbnail()
modifica la imagen "en su lugar", lo que
significa que los cambios ocurren en el objeto image
original.
Después de ejecutar thumbnail()
, Pillow reducirá la imagen para
que sus dimensiones no excedan los 400x400 píxeles, manteniendo las proporciones.
Escalado con proporciones usando ImageOps.fit()
A veces es necesario redimensionar una imagen para que coincida exactamente con tamaños específicos, pero manteniendo las proporciones recortando las partes sobrantes. En
esos casos se puede usar el método ImageOps.fit()
.
from PIL import ImageOps
# Configurar nuevo tamaño
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)
# Guardar la imagen recortada
fitted_image.save("fitted_example.jpg")
El método ImageOps.fit()
recorta automáticamente la imagen para que
coincida con las dimensiones especificadas sin distorsión. Por ejemplo, si la
imagen original es rectangular, el método recortará los bordes para que sea cuadrada y encaje en el tamaño
400x400 píxeles.
3. Ejemplo completo de código
A continuación, se muestra un ejemplo de código que combina todos los métodos revisados — desde la carga hasta el cambio de tamaño y guardado de imágenes.
from PIL import Image, ImageOps
# Abrir la imagen
image = Image.open("example.jpg")
# Cambiar el tamaño sin conservar proporciones
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")
# Reducción proporcional de la imagen
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")
# Escalar recortando al tamaño necesario
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")
Explicación de los métodos de cambio de tamaño
-
resize()
: permite especificar dimensiones arbitrarias, pero puede causar distorsión si las nuevas dimensiones no se ajustan a las proporciones originales. -
thumbnail()
: cambia el tamaño de la imagen manteniendo las proporciones. Útil para crear miniaturas y reducir imágenes grandes. -
ImageOps.fit()
: escala la imagen a las dimensiones especificadas recortando bordes. Se usa cuando necesitas un ajuste exacto sin distorsiones.
4. Consejos:
Aplicaciones prácticas del cambio de tamaño de imágenes
- Optimización de imágenes para sitios web: Las imágenes grandes pueden ralentizar la carga de la página, por lo que es importante optimizarlas reduciendo el tamaño sin perder calidad.
-
Creación de miniaturas para galerías: Usar
thumbnail()
permite crear miniaturas rápido que se pueden mostrar en la vista previa. -
Ajuste de imágenes a tamaños específicos: Cuando necesitas
ajustar una imagen a dimensiones fijas, como para un avatar
o perfil, el método
ImageOps.fit()
permite recortar y escalar la imagen para que cumpla con estos requisitos.
Consejos para elegir métodos
Usa resize()
cuando necesites especificar exactamente el ancho y
alto de la imagen, y no te preocupe si se alteran las proporciones.
Aplica thumbnail()
para crear miniaturas o cuando quieras
reducir una imagen manteniendo sus proporciones.
Usa ImageOps.fit()
cuando necesites una imagen
de tamaño específico sin distorsión de proporciones. Este método recorta
las partes sobrantes, lo cual es útil para ajustar la imagen a un marco determinado.
GO TO FULL VERSION