CodeGym /Cursos /Python SELF ES /Trabajo con metadatos

Trabajo con metadatos

Python SELF ES
Nivel 46 , Lección 3
Disponible

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.

Python

# 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

Python

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

Python

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

Python

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.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION