Biblioteca de manipulación Exif para Python [cerrado]

108

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?

oo_olo_oo
fuente
Quizás la pregunta debería ser: "¿Qué opciones están disponibles para editar Exif (formato de archivo de imagen intercambiable) usando Python que enfatizan el conjunto de características (por ejemplo, la capacidad de recuperar las etiquetas de propiedad de los proveedores y la compatibilidad con una amplia variedad de formatos de imagen) a través de la velocidad?"
dlm
1
@Wooble et al: "Si esta pregunta se puede reformular para que se ajuste a las reglas del centro de ayuda, edite la pregunta o deje un comentario". Hice lo último, pero la Q cerró sin más comentarios. ¿Lo que da? (Solo intento entender y no quiero perder el tiempo comentando / editando preguntas si es una conclusión inevitable)
dlm
¡Quería las opiniones de otros desarrolladores al hacer esta pregunta! PackageOpinionOverflow?
Derek Litz
1
Tenga en cuenta que prácticamente todas las soluciones que no son exiv2 aquí no podrán acceder MakerNote. En esta etiqueta EXIF, los fabricantes de cámaras agregan sus propias etiquetas que contienen información valiosa. Por lo tanto, solo obtendría las etiquetas básicas con la mayoría de las bibliotecas de las respuestas a continuación.
user136036

Respuestas:

65

Es posible que desee consultar 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) :

La biblioteca de imágenes de Python (PIL) agrega capacidades de procesamiento de imágenes a su intérprete de Python. Esta biblioteca admite muchos formatos de archivo y proporciona potentes capacidades de procesamiento de imágenes y gráficos.

También está el acertadamente llamado pyexif: http://pyexif.sourceforge.net/

La biblioteca y las herramientas de python pyexif tienen como objetivo extraer información EXIF ​​de los archivos Jpeg y Tiff que la incluyen. Esta información generalmente se incluye en imágenes creadas con dispositivos de imágenes digitales como cámaras digitales, escáneres de películas digitales, etc.

Sin embargo, parece que pyexif no se ha actualizado en bastante tiempo. Recomiendan que, si el suyo no funciona, verifique EXIF-py, por lo que probablemente debería probar ese primero, ya que su página de sourceforge parece tener algo de actividad últimamente, aunque no mucha. 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 : en
realidad, no tengo idea de cuál es mejor, esto es solo lo que pude reconstruir con Google. :)

Paolo Bergantino
fuente
19
Ninguna de estas "soluciones" puede volver a escribir etiquetas EXIF, por lo que no son una solución a la pregunta.
odinho - Velmont
22
Aunque técnicamente no permite escribir etiquetas EXIF, encontré esto muy útil. +1 para escribir código.
Cerin
3
Sin PIL para Python 3.x
Más de cinco
Buena descripción. Solo una nota: parece que exif-py actualmente no es compatible con Python 3.x (probado con Python 3.3.3, consulte también github.com/ianare/exif-py/issues/12 ).
cel
3
@MoreThanFive ¡Hay una bifurcación PIL que se mantiene en gran medida y que se integra con pip! github.com/python-pillow/Pillow
ibizaman
59

He estado usando pyexiv2 recientemente y parece que se adapta bastante bien a mis necesidades. Quizás también se adapte al tuyo.


fuente
9
Para el registro: pyexiv2 parece ser el mejor mantenido de todos y el más completo (incluida la escritura de etiquetas EXIF ​​en el archivo).
rbp
1
¿Se puede instalar pyexiv2 fácilmente dentro de un virtualenv?
Matt Austin
2
El mantenimiento parece ralentizarse y la instalación en Mac es un infierno. : /
Vortexfive
6
Para aquellos que se preocupan: Desafortunadamente, pyexiv2 solo está disponible para Python 2.
texnic
1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Esto funcionará igualmente bien con Python 2 o 3, lo que hace que GExiv2 sea un excelente reemplazo para pyexiv2, que solo es compatible con Python 2. </QUOTE>
jno
31

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), comprende estándares (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:

Una ventaja de pyexiv2 es que hay una compilació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).

dlm
fuente
actualizado esto basado en la información más reciente sobre enlaces a exiv2
dlm
pyexiv2se ha bifurcado: py3exiv2.tuxfamily.org .
Artem Klevtsov
enlace tilloy.net muerto
jtlz2
5

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 admiten la escritura de EXIF. pyexiv2 parece ser de vanguardia y específico de la plataforma.

Jason R. Coombs
fuente
No estoy seguro de si esto puede considerarse una ventaja menos avanzada.
Mad Physicist
5

Utilice 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')
Max
fuente
1
Pure PIL / Pillow no permite modificar etiquetas EXIF. Pero hay una pequeña biblioteca que ayuda con eso: github.com/hMatoba/Pyxif
Simon Steinberger
4

La página en http://redmine.yorba.org/projects/gexiv2/wiki (se convirtió en https://wiki.gnome.org/Projects/gexiv2 ) dice ahora :

Esto funcionará igualmente bien con Python 2 o 3, lo 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.

jno
fuente
2
El enlace no funciona. esto funciona wiki.gnome.org/Projects/gexiv2
user881300
buena actualización! Han pasado 3 años desde 2013 ...
jno
3

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 IP dinámica a través de DynDNS, por lo que no siempre está disponible.


fuente
Ya no existe.
Simon Steinberger
3

de alguna manera obtengo un atributoError para _getexif con el código de Paolo anterior. 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
otterb
fuente
3

Comencé a escribir mi propia pequeña biblioteca que se basa en el código de PIL. compruébalo aquí .

Albert
fuente
1
Oye, eso se ve bien. ¿Tiene bordes afilados?
Rich
@Rich: Ya no lo recuerdo. Esto ha funcionado para mí.
Albert
3

He estado usando mis propias envolturas en http://www.sno.phy.queensu.ca/~phil/exiftool/ - la razón es que es muy completo, el desarrollador es muy activo. Y no poder admitir casi todos los formatos de imagen es una maravilla absoluta para el proyecto para el que se necesita.

El inconveniente, por supuesto, es que no es Python, por lo que necesitaría usar llamadas a subprocesos, como yo.

Geert Dekkers
fuente
Hay una envoltura de Python para exiftool github.com/smarnach/pyexiftool . Un voto a exiftool por el hecho de que es muy completo.
Long Vu
Está pidiendo una lib de Python.
Diego Woitasen
1

Hay algunos ejemplos de uso de PIL y EXIF.py en ASPN

Michał Niklas
fuente
0

En Python 2.6, el lugar del módulo es diferente. Utilizar este:

import Image    
from ExifTags import TAGS
Tomasz Nazar
fuente