Manipulación de metadatos de imágenes con Python 2.x
En imagenes 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 la imagen. Aprenda a leer y a escribir estos metadatos usando Python.

Note
Este artículo es obsolescente. Las instrucciones que se dan aquí, aunque todavía pueden funcionar, ya están desactualizadas. Lea el artículo más reciente para aprender a hacer lo mismo con herramientas actuales.
En imagenes 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 la imagen [1].
La imagen de la Figura 1, por ejemplo, fue manipulada con un script escrito en Python y que usa pyexiv2 para agregar metadatos. Si se descarga la imagen y se inspeccionan sus propiedades, pueden leerse los siguientes metadatos:

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 pyexiv2 import ImageMetadata # Load image metadata image = "diatoms.jpg" metadata = ImageMetadata(image) metadata.read() # Print XMP metadata if metadata.xmp_keys: for key in metadata.xmp_keys: print("{}: {}".format(key, metadata[key].raw_value))
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:
$ python read.py Xmp.dc.source: http://www.photolib.noaa.gov/htmls/corp2365.htm Xmp.dc.title: {'x-default': 'Diatoms through the microscope'} Xmp.dc.date: ['1983-01-20'] Xmp.dc.description: {'x-default': '\nAssorted diatoms as seen through a microscope. These specimens were living\nbetween crystals of annual sea ice in McMurdo Sound, Antarctica. Image\ndigitized from original 35mm Ektachrome slide. These tiny phytoplankton are\nencased within a silicate cell wall.\n'} Xmp.dc.subject: ['Antartica', 'Oceanography', 'Biological', 'Diatoms'] Xmp.dc.creator: ['Prof. Gordon T. Taylor, Stony Brook University'] Xmp.dc.contributor: ['NSF Polar Programs'] Xmp.dc.rights: {'x-default': 'Public domain'}
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 pyexiv2 import ImageMetadata, XmpTag # Load image metadata image = ImageMetadata("diatoms.jpg") image.read() # Add XMP metadata and write it to the images image["Xmp.dc.title"] = "Diatoms through the microscope" image["Xmp.dc.date"] = [datetime(1983, 1, 20)] image["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. """ image["Xmp.dc.subject"] = [ "Antartica", "Oceanography", "Biological", "Diatoms" ] image["Xmp.dc.creator"] = ["Prof. Gordon T. Taylor, Stony Brook University"] image["Xmp.dc.contributor"] = ["NSF Polar Programs"] image["Xmp.dc.rights"] = "Public domain" image["Xmp.dc.source"] = "http://www.photolib.noaa.gov/htmls/corp2365.htm" image.write()
[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: