CodeGym /Cursos /Python SELF ES /Gestión de formatos y conversión

Gestión de formatos y conversión

Python SELF ES
Nivel 46 , Lección 2
Disponible

1. Identificación del formato de imagen

Formatos de imagen compatibles

Pillow es compatible con muchos formatos de imagen, incluyendo:

  • JPEG (JPG): Uno de los formatos más populares para fotos. Comprime las imágenes con pérdida de calidad, pero reduce significativamente el tamaño del archivo. No soporta transparencia.
  • PNG: Formato sin pérdidas que soporta transparencia (canal alfa). Ideal para logotipos, íconos e imágenes donde es importante la nitidez.
  • BMP: Formato de alta calidad sin compresión, pero con un tamaño de archivo grande. Soporta transparencia.
  • TIFF: Popular para almacenar imágenes sin pérdidas. Se utiliza a menudo en impresión.
  • WEBP: Formato moderno con alta compresión y soporte de transparencia. Ideal para imágenes web ya que proporciona un archivo pequeño con buena calidad.

Cargar una imagen para convertir

Antes de convertir una imagen, primero tienes que cargarla usando el método Image.open().

Python

from PIL import Image

# Apertura de la imagen
image = Image.open("example.jpg")
print(image.format)  # Comprobamos el formato original de la imagen

2. Conversión de la imagen a otro formato

El método save() permite guardar imágenes en diferentes formatos simplemente cambiando la extensión en el nombre del archivo o especificando el formato explícitamente.

Conversión de JPEG a PNG

Para convertir una imagen de JPEG a PNG, simplemente especifica la nueva extensión al guardar el archivo:

Python

# Guardar imagen en formato PNG
image.save("example_converted.png")

Este código convierte la imagen del formato JPEG al formato PNG, guardándola con el nombre especificado. PNG es perfecto para imágenes sin pérdidas y también soporta áreas transparentes.

Conversión de PNG a JPEG

La conversión de una imagen de PNG a JPEG también es posible, pero es importante recordar que JPEG no soporta transparencia. Las áreas transparentes serán rellenadas con color blanco.

Python

# Conversión de PNG a JPEG (la transparencia será reemplazada con un fondo blanco)
image = image.convert("RGB")  # Cambiar al modo RGB necesario para JPEG
image.save("example_converted.jpg", "JPEG")

El método convert("RGB") se utiliza para convertir la imagen al modo RGB, ya que JPEG no soporta áreas transparentes. Esto es necesario para guardar el archivo en formato JPEG.

3. Gestión de la calidad de la imagen

Para optimizar imágenes, Pillow ofrece los parámetros quality y optimize, que permiten controlar la calidad y el tamaño del archivo. Estos parámetros son especialmente útiles para JPEG y PNG.

Optimización y gestión de la calidad de JPEG

Al guardar una imagen en formato JPEG, el parámetro quality ajusta el nivel de compresión. Cuanto mayor sea el valor, mayor será el tamaño del archivo y la calidad de la imagen. El valor de quality varía de 1 a 95 (por defecto 75).

Python

# Guardar imagen JPEG con calidad reducida
image.save("example_compressed.jpg", "JPEG", quality=85)

Este código guarda la imagen con una calidad de 85, lo que generalmente preserva buena calidad con un tamaño de archivo reducido. Si necesitas menos calidad, por ejemplo, para crear miniaturas, puedes especificar quality=50.

Optimización de PNG

Para PNG, el parámetro optimize=True realiza una compresión sin pérdidas, eliminando datos redundantes. Esto es especialmente útil para publicar imágenes en la web.

Python

# Guardar PNG optimizado
image.save("example_optimized.png", "PNG", optimize=True)

La optimización de PNG ayuda a reducir el tamaño del archivo sin pérdida de calidad, lo cual es particularmente importante para logotipos e íconos donde cada kilobyte cuenta.

Comparación de calidad JPEG con diferentes niveles de compresión

Veamos cómo el ajuste del parámetro quality afecta el tamaño del archivo y la calidad de la imagen.

Python

# Guardar imagen JPEG con diferentes niveles de calidad
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)

En este ejemplo, guardamos la misma imagen con tres niveles de calidad: 95, 75 y 50. La imagen con calidad 95 será casi indistinguible del original pero ocupará más espacio, mientras que la calidad 50 resultará en una compresión significativa y, posiblemente, pérdida de detalles visibles.

4. Uso del formato WebP

El formato WebP es un formato moderno que soporta compresión con pérdidas y sin pérdidas, así como transparencia. Es ampliamente utilizado en la web debido a su alto nivel de compresión.

Conversión de imagen al formato WebP

Python

# Conversión de imagen a WebP
image.save("example.webp", "WEBP", quality=80)

En este ejemplo, guardamos la imagen en formato WebP con calidad 80. WebP permite obtener archivos significativamente más pequeños comparados con JPEG o PNG manteniendo una calidad similar.

Ejemplo de conversión completa con optimización

Ahora combinemos todos los métodos discutidos y creemos un script para convertir una imagen a varios formatos con optimización.

Python

from PIL import Image

# Apertura de la imagen
image = Image.open("example.jpg")

# Conversión a PNG con optimización
image.save("converted_optimized.png", "PNG", optimize=True)

# Conversión a JPEG con calidad reducida
image_rgb = image.convert("RGB")  # Cambiar al modo RGB para JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)

# Conversión a WebP con calidad optimizada
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)

En este ejemplo:

  • Convertimos la imagen a PNG con optimización, lo que ayuda a reducir el tamaño del archivo sin pérdidas.
  • Guardamos la imagen en formato JPEG con calidad 85, lo que asegura buena calidad y tamaño reducido.
  • Convertimos la imagen al formato WebP, ideal para publicaciones online, manteniendo alta calidad con un tamaño pequeño.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION