2011-12-21 29 views
6

Estoy buscando escribir metadatos personalizados en las imágenes (principalmente jpegs, pero también podrían ser otros). Hasta ahora no he podido hacerlo a través de PIL preferiblemente (estoy en centos 5 & No he podido instalar pyexiv) Entiendo que puedo actualizar algunas etiquetas predefinidas, pero necesito crear campos personalizados/etiquetas! ¿Se puede hacer eso?Escribir metadatos personalizados complejos en imágenes a través de python

Esta información sería creada por los usuarios, por lo que no sabría qué etiquetas contienen o qué contienen. Necesito permitirles que creen etiquetas/subetiquetas & y luego escribir datos para ellas. Por ejemplo, alguien puede desear crear estos metadatos en una imagen en particular:

Category : Human 

Physical : 
    skin_type : smooth 
    complexion : fair 
    eye_color: blue 
    beard: yes 
    beard_color: brown 
    age: mid 

Location : 
    city: london 
    terrain: grass 
    buildings: old 

También encontré que al guardar un archivo JPEG a través de la PIL JpegImagePlugin, todos los metadatos anterior se sobrescribe con los nuevos datos que no llegan a ¿editar? ¿Es eso un error?

Saludos, S

Respuesta

12

La pitón pyexiv2 module pueden leer/escribir los metadatos.

Creo que hay un conjunto limitado de etiquetas EXIF ​​válidas. No sé cómo, o si es posible crear sus propias etiquetas personalizadas. Sin embargo, se puede utilizar la etiqueta Exif.Photo.UserComment, y llenarlo con JSON:

import pyexiv2 
import json 

metadata = pyexiv2.ImageMetadata(filename) 
metadata.read() 
userdata={'Category':'Human', 
      'Physical': { 
       'skin_type':'smooth', 
       'complexion':'fair' 
       }, 
      'Location': { 
       'city': 'london' 
       } 
      } 
metadata['Exif.Photo.UserComment']=json.dumps(userdata) 
metadata.write() 

Y para leer de nuevo:

import pprint 
filename='/tmp/image.jpg' 
metadata = pyexiv2.ImageMetadata(filename) 
metadata.read() 
userdata=json.loads(metadata['Exif.Photo.UserComment'].value) 
pprint.pprint(userdata) 

rendimientos

{u'Category': u'Human', 
u'Location': {u'city': u'london'}, 
u'Physical': {u'complexion': u'fair', u'skin_type': u'smooth'}} 
+1

Muchas gracias por este ! En realidad, la pyexiv2, puedo incluso escribir metadatos personalizados: ' pyexiv2.xmp.register_namespace ('/', 'costumbre') metadatos [ 'Xmp.custom.category'] = 'Humano' ' Pero el problema es que en (centos 5 + python2.6), no puedo instalar pyexiv2 con todas sus dependencias: P ¡Estoy intentando ver si PIL funciona para mí! – Saurabh

+1

Gracias por mostrar cómo crear etiquetas personalizadas. Lo siento, no sé mucho sobre CentOS (y supongo que probó 'yum install pyexiv2'.) Desafortunadamente, AFAIK, PIL 1.1.7 [puede leer pero no escribir metadatos EXIF] (http://stackoverflow.com/ a/1608545/190597) y [el soporte de escritura EXIF ​​aún no se ha agregado a PIL 1.2] (https://bitbucket.org/effbot/pil-2009-raclette/src/cd403356263f/CHANGES). – unutbu

+0

Tienes razón. Me estoy rindiendo en PIL. ¡Pero acepté tu publicación anterior como mi respuesta, ya que me da una base justa para continuar! ¡Gracias! – Saurabh

Cuestiones relacionadas