python - exifread online
Biblioteca de manipulación Exif para python (12)
Estoy buscando una buena biblioteca de manipulación exif (formato de archivo de imagen intercambiable) para Python. Prefiero la flexibilidad (por ejemplo, la capacidad de recuperar las etiquetas propietarias de los proveedores) que la velocidad de procesamiento. ¿Qué sugieres?
Soluciones basadas en Exiv2
Exiv2 (exiv2: http://exiv2.org/ ) es una biblioteca C ++ madura y de código abierto que admite la lectura y escritura de metadatos en muchos tipos de imágenes (JPEG, PNG, TIFF y muchos formatos sin procesar), entiende estándar (Xmp, IPTC) y Exif) y metadatos no estándar ("Makernotes"), y se ejecuta en múltiples plataformas (Windows, Linux y, con algo de trabajo, Mac).
Los enlaces de Python a exiv2 son:
- gexiv2 (un enlace multi-idioma, pero funciona con python 2.6 / 2.7 / 3.X): https://wiki.gnome.org/gexiv2
- pyexiv2 (ya no es compatible, pero funciona con Python 2.6 / 2.7): pyexiv2
Una ventaja de pyexiv2 es que hay una versión de Windows disponible para Python 2.7. Una solicitud de compilación de Windows para gexiv2 está aquí: https://bugzilla.gnome.org/show_bug.cgi?id=712441
exiv2 y los enlaces son todos de código abierto (GPL).
Empecé a escribir mi propia pequeña biblioteca que se basa en el código en PIL. compruébalo aquí .
En Python 2.6, el lugar del módulo es diferente. Utilizar esta:
import Image
from ExifTags import TAGS
Es posible que desee verificar exif-py :
Biblioteca de Python para extraer datos EXIF de archivos tiff y jpeg. Muy fácil de usar - $ ./EXIF.py image.jpg
o la Biblioteca de imágenes de Python (PIL) :
Python Imaging Library (PIL) agrega capacidades de procesamiento de imágenes a su intérprete de Python. Esta biblioteca es compatible con muchos formatos de archivo y proporciona un potente procesamiento de imágenes y capacidades gráficas.
También está el bien llamado pyexif: http://pyexif.sourceforge.net/
La biblioteca y herramientas pyexif python tiene como objetivo extraer información EXIF de los archivos Jpeg y Tiff que lo incluyen. Esta información generalmente se incluye en las imágenes creadas con dispositivos de imágenes digitales, como cámaras digitales, escáneres de película digital, etc.
Sin embargo, parece que pyexif no se ha actualizado en bastante tiempo. Recomiendan si el suyo no está haciendo el truco para verificar EXIF-py, por lo que probablemente deberían probarlo primero, ya que su página de sourceforge parece tener alguna actividad allí últimamente, aunque no mucho. Finalmente, usando PIL puedes hacer esto:
from PIL import Image
from PIL.ExifTags import TAGS
def get_exif(fn):
ret = {}
i = Image.open(fn)
info = i._getexif()
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
Descargo de responsabilidad :
De hecho, no tengo idea de cuál es la mejor, esto es solo lo que pude juntar con Google. :)
Hay algunos ejemplos del uso de PIL y EXIF.py en ASPN
He estado usando pyexiv2 recientemente, y parece ajustarse bastante bien a mis necesidades. Quizás también podría ser el tuyo.
He estado usando mis propios contenedores en http://www.sno.phy.queensu.ca/~phil/exiftool/ - la razón es que es muy completa, el desarrollador es muy activo. Y no ser capaz de soportar casi todos los formatos de imagen es una maravilla absoluta para el proyecto que se necesita para
El inconveniente, por supuesto, es que no es python, por lo que necesitaría usar llamadas de subproceso, como yo.
La página en http://redmine.yorba.org/projects/gexiv2/wiki dice ahora :
Esto funcionará igual de bien con Python 2 o 3, que hace que GExiv2 sea un excelente reemplazo para pyexiv2, que solo es compatible con Python 2.
Entonces, tanto Python2 como Python3 ahora son compatibles con GExiv2.
Buenas noticias.
También puede consultar la biblioteca jpeg.py de Gheorghe Milas en http://www.emilas.com/jpeg/ , que es "Una biblioteca de Python para analizar, leer y escribir metadatos JPEG EXIF, IPTC y COM".
Un inconveniente es que parece estar alojando su dominio en una dirección IP dinámica a través de DynDNS, por lo que no siempre está disponible.
Use PIL :)
import os,sys
from PIL import Image
from PIL.ExifTags import TAGS
if __name__ == ''__main__'':
for (k,v) in Image.open(sys.argv[1])._getexif().iteritems():
print ''%s = %s'' % (TAGS.get(k), v)
os.system(''pause'')
de alguna manera obtengo un attributeError para _getexif con el código de Paolo arriba. Estoy usando Python 2.6.6 y PIL 1.1.7. ¿_getexif está obsoleto ahora?
Aquí hay una pequeña modificación que funcionó para mí.
from PIL import Image
from PIL.ExifTags import TAGS
def get_exif(fn):
ret = {}
i = Image.open(fn)
# info = i._getexif()
info = i.tag.tags
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
Este artículo describe un módulo de Python para escribir metadatos EXIF (y no solo leerlos) usando Python puro. Aparentemente, ninguno de PIL, pyexif ni EXIF-py admite la escritura de EXIF. pyexiv2 parece ser de última generación y específica de la plataforma.