1. Trabajo con metadatos EXIF
Los metadatos EXIF almacenan información sobre las características de una imagen, como los parámetros de captura (ISO, velocidad de obturación, apertura), fecha de creación, orientación e incluso las coordenadas del lugar donde se tomó la foto. Los datos EXIF pueden ser extraídos y usados para analizar imágenes o automatizar su procesamiento.
Extracción de datos EXIF
Los metadatos EXIF pueden extraerse utilizando el atributo info o getexif(). El método getexif() proporciona acceso al conjunto completo de datos EXIF, si están presentes en la imagen.
# Extracción de datos EXIF
exif_data = image._getexif()
# Verificar si existen datos EXIF
if exif_data is not None:
for tag_id, value in exif_data.items():
tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
print(f"{tag}: {value}")
else:
print("Datos EXIF no encontrados.")
En este código, Image.ExifTags.TAGS se utiliza para decodificar los identificadores de etiquetas EXIF en nombres legibles, como "DateTime", "ExposureTime", "ISOSpeedRatings", etc. Si la imagen no contiene datos EXIF, la función simplemente mostrará un mensaje al respecto.
2. Extracción de metadatos clave
Los metadatos EXIF suelen incluir parámetros de captura, como resolución, orientación y geolocalización. Veamos cómo obtener algunos de estos valores, si están presentes en los datos EXIF.
Extracción de fecha y hora de captura, resolución y orientación
from PIL.ExifTags import TAGS
# Verificar si existen datos EXIF
if exif_data is not None:
# Inicializar variables para almacenar valores
date_time = None
orientation = None
resolution = None
for tag_id, value in exif_data.items():
tag = TAGS.get(tag_id, tag_id)
# Extraer datos según etiquetas
if tag == "DateTime":
date_time = value
elif tag == "Orientation":
orientation = value
elif tag == "XResolution" or tag == "YResolution":
resolution = value
print("Fecha y hora de captura:", date_time)
print("Orientación:", orientation)
print("Resolución:", resolution)
else:
print("Datos EXIF no encontrados.")
En este ejemplo se extraen valores para DateTime (fecha y hora de captura), Orientation (orientación de la imagen) y XResolution/YResolution (resolución de la imagen). Estos datos suelen ser útiles al clasificar fotos o generar informes.
3. Añadir y editar metadatos EXIF
Aunque Pillow tiene soporte limitado para añadir datos EXIF, es posible conservarlos al convertir imágenes si ya están presentes en la imagen original.
Ejemplo: Conservar metadatos al convertir
Para conservar los datos EXIF al guardar una imagen, utiliza el parámetro exif al llamar al método save().
# Verificar la existencia de EXIF y guardar con metadatos
if exif_data is not None:
exif_bytes = image.info['exif']
image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
print("Datos EXIF no encontrados.")
Este código conserva los datos EXIF al convertir una imagen a otro formato, permitiendo mantener las configuraciones originales de captura.
4. Ejemplos:
Ejemplo completo de trabajo con formatos y metadatos EXIF
Finalmente, veamos un ejemplo que convierte una imagen, la optimiza y conserva los datos EXIF.
from PIL import Image, ExifTags
# Abrir una imagen
image = Image.open("original.jpg")
# Verificar si existen datos EXIF
exif_data = image._getexif()
if exif_data:
exif_bytes = image.info['exif'] # Guardar datos EXIF para su uso posterior
else:
print("Datos EXIF no encontrados.")
# Convertir la imagen a PNG y optimizar
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)
# Convertir a JPEG, conservando datos EXIF y reduciendo la calidad
if exif_data:
image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
image.save("compressed_without_exif.jpg", quality=85)
Este código incluye:
- Conversión de una imagen al formato PNG con optimización.
- Conversión al formato JPEG reduciendo la calidad para optimizar el tamaño.
- Conservación de datos EXIF durante la conversión, si están presentes.
Aplicaciones prácticas del trabajo con formatos y metadatos EXIF
- Optimización de imágenes para la web: Convertir imágenes a formatos optimizados, como JPEG y PNG, reduce el tamaño del archivo y acelera la carga de las páginas.
- Extracción de datos para informes: Los metadatos EXIF contienen información sobre parámetros de captura, que puede ser útil para analizar fotos y crear informes.
- Mantenimiento de metadatos durante la edición: Al editar imágenes, es posible conservar los parámetros originales de captura, lo cual es útil para archivar y documentar.
GO TO FULL VERSION