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