CodeGym /Curso de Java /Python SELF ES /Cambio de tamaño de imágenes

Cambio de tamaño de imágenes

Python SELF ES
Nivel 45 , Lección 1
Disponible

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.

Python

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.

Python

# 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.

Python

# 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.

Python

# 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.

Python

# 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().

Python

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.

Python

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

  1. resize(): permite especificar dimensiones arbitrarias, pero puede causar distorsión si las nuevas dimensiones no se ajustan a las proporciones originales.
  2. thumbnail(): cambia el tamaño de la imagen manteniendo las proporciones. Útil para crear miniaturas y reducir imágenes grandes.
  3. 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

  1. 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.
  2. Creación de miniaturas para galerías: Usar thumbnail() permite crear miniaturas rápido que se pueden mostrar en la vista previa.
  3. 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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION