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?


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. :)


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.


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).


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.


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')

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.


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.


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

3

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


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.


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


0

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

import Image    
from ExifTags import TAGS
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.