· Cambiar idioma (Actualmente: Español)

Manipulación de metadatos de imágenes con Python 3.x

Enero 14, 2015 00:00 -0500

En las imágenes digitales se pueden incrustar datos como autor, fecha de creación, descripción, permisos, entre otros, de tal forma que estos datos viajen siempre con ellas. Aprenda a leer y a escribir estos metadatos usando Python 3 y gexiv2.

Figura 1
Figura 1. Diatomeas marinas fotografiadas por el Prof. Gordon T. Taylor de la Universidad Stony Brook.

En las imágenes digitales se pueden incrustar datos como autor, fecha de creación, descripción, copyright, entre otros, de tal forma que estos datos viajen siempre con ellas [1].

La imagen de la Figura 1, por ejemplo, fue manipulada con un script escrito en Python y que usa gexiv2 para agregar metadatos. Si se descarga la imagen y se inspeccionan sus propiedades, pueden leerse los siguientes metadatos:

Figura 2
Figura 2. Metadatos de una imagen vistos en el diálogo de propiedades del navegador de archivos Nautilus, en Debian 8.

Formatos de metadatos

Parece que hay tres formatos populares para incrustar metadatos en imágenes:

De los tres anteriores, XMP parece mejor por ser un estándar ISO y porque es compatible con más formatos de imágenes (y otros tipos de archivos). Los siguientes ejemplos usan XMP como formato de metadatos.

Ejemplo 1: Leer metadatos

from gi.repository import GExiv2


# Obtener metadatos actuales de la imagen
image = "diatoms.jpg"
metadata = GExiv2.Metadata(image)

# Imprimir todos los metadatos
for key in metadata:
    print("{}: {}".format(key, metadata[key]))

Al ejecutar el código anterior, en este caso guardado como archivo read.py al mismo nivel de la imagen que aparece al inicio de esta entrada, se pueden leer los metadatos en el terminal:

$ python3 read.py
Xmp.dc.contributor: NSF Polar Programs
Xmp.dc.creator: Prof. Gordon T. Taylor, Stony Brook University
Xmp.dc.date: 1983-01-20
Xmp.dc.description: lang="x-default"
Assorted diatoms as seen through a microscope. These specimens were living
between crystals of annual sea ice in McMurdo Sound, Antarctica. Image
digitized from original 35mm Ektachrome slide. These tiny phytoplankton are
encased within a silicate cell wall.

Xmp.dc.rights: lang="x-default" Public domain
Xmp.dc.source: http://www.photolib.noaa.gov/htmls/corp2365.htm
Xmp.dc.subject: Antartica, Oceanography, Biological, Diatoms
Xmp.dc.title: lang="x-default" Diatoms through the microscope

Ejemplo 2: Escribir metadatos

Los metadatos de la imagen de la Figura 1 se agregaron usando el siguiente código sobre la imagen original, que no contenía metadatos XMP.

from datetime import datetime

from gi.repository import GExiv2


# Obtener metadatos actuales de la imagen
image = "diatoms.jpg"
metadata = GExiv2.Metadata(image)


# Agregar metadatos XMP y guardarlos junto con la imagen
metadata["Xmp.dc.title"] = "Diatoms through the microscope"
metadata["Xmp.dc.date"] = datetime(1983, 1, 20).strftime("%Y-%m-%d")
metadata["Xmp.dc.description"] = """
Assorted diatoms as seen through a microscope. These specimens were living
between crystals of annual sea ice in McMurdo Sound, Antarctica. Image
digitized from original 35mm Ektachrome slide. These tiny phytoplankton are
encased within a silicate cell wall.
"""
metadata["Xmp.dc.subject"] = "Antartica, Oceanography, Biological, Diatoms"
metadata["Xmp.dc.creator"] = "Prof. Gordon T. Taylor, Stony Brook University"
metadata["Xmp.dc.contributor"] = "NSF Polar Programs"
metadata["Xmp.dc.rights"] = "Public domain"
metadata["Xmp.dc.source"] = "http://www.photolib.noaa.gov/htmls/corp2365.htm"

metadata.save_file()
[1]Realmente los metadatos viajan con la imagen hasta que otro software decide modificarlos o eliminarlos. Por ejemplo, si subo una imagen con metadatos como los que se presentan en esta entrada a un blog de WordPress.com, WordPress los elimina. ¿Por qué lo hacen? No sé.

Temas relacionados: