Bibliothèque de manipulation Exif pour python [fermé]


108

Je recherche une bonne bibliothèque de manipulation exif (Exchangeable Image File Format) pour python. Je préfère la flexibilité (par exemple, la capacité de récupérer les balises propriétaires des fournisseurs) à la vitesse de traitement. Que suggérerais-tu?


Peut-être que la question devrait se lire: "Quelles sont les options disponibles pour éditer Exif (format de fichier image échangeable) à l'aide de python qui mettent l'accent sur l'ensemble de fonctionnalités (par exemple, la capacité de récupérer les balises propriétaires des fournisseurs et la compatibilité avec une grande variété de formats d'image) sur la vitesse?"
dlm

1
@Wooble et al: "Si cette question peut être reformulée pour correspondre aux règles du centre d'aide, veuillez la modifier ou laisser un commentaire." J'ai fait ce dernier, mais le Q s'est fermé sans autre commentaire. Ce qui donne? (J'essaie juste de comprendre, et je ne veux pas perdre de temps à commenter / éditer des questions si c'est
gagné d'avance

Je voulais d'autres avis de développeurs en posant cette question! PackageOpinionOverflow?
Derek Litz

1
Gardez à l'esprit que pratiquement toutes les solutions non-exiv2 ici ne pourront pas accéder MakerNote. Dans cette balise EXIF, les fabricants d'appareils photo ajoutent leurs propres balises contenant des informations précieuses. Ainsi, vous n'obtiendrez que les balises de base avec la plupart des bibliothèques à partir des réponses ci-dessous.
user136036 le

Réponses:


65

Vous voudrez peut-être consulter exif-py :

Bibliothèque Python pour extraire les données EXIF ​​des fichiers tiff et jpeg. Très facile à utiliser - $ ./EXIF.py image.jpg

ou la bibliothèque d'imagerie Python (PIL) :

La bibliothèque d'imagerie Python (PIL) ajoute des capacités de traitement d'image à votre interpréteur Python. Cette bibliothèque prend en charge de nombreux formats de fichiers et offre de puissantes capacités de traitement d'images et de graphiques.

Il y a aussi le bien nommé pyexif: http://pyexif.sourceforge.net/

La bibliothèque et les outils python pyexif visent à extraire les informations EXIF ​​des fichiers Jpeg et Tiff qui les incluent. Ces informations sont généralement incluses dans les images créées à l'aide d'appareils d'imagerie numérique tels que les appareils photo numériques, les scanners de films numériques, etc.

Cependant, il semble que pyexif n'ait pas été mis à jour depuis un certain temps. Ils recommandent si le leur ne fait pas l'affaire pour vérifier EXIF-py, donc vous devriez probablement essayer celui-là d'abord, car leur page sourceforge semble y avoir une activité ces derniers temps, mais pas beaucoup. Enfin, en utilisant PIL, vous pouvez faire ceci:

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

Avertissement :
je n'ai aucune idée de ce qui est le mieux, c'est exactement ce que j'ai pu reconstituer avec Google. :)


20
Aucune de ces «solutions» ne peut réécrire les balises EXIF, elles ne sont donc pas une solution à la question.
odinho - Velmont

23
Bien que techniquement ne permette pas d'écrire des balises EXIF, j'ai trouvé cela très utile. +1 pour écrire du code.
Cerin

3
Pas de PIL pour Python 3.x
Plus de cinq

Belle vue d'ensemble. Juste une note: exif-py n'est actuellement pas compatible avec Python 3.x semble-t-il (testé avec Python 3.3.3, voir aussi github.com/ianare/exif-py/issues/12 ).
cel

3
@MoreThanFive Il existe un fork PIL qui est fortement maintenu et qui s'intègre avec pip! github.com/python-pillow/Pillow
ibizaman

59

Je me sers de pyexiv2 moi - même récemment, et il semble répondre à mes besoins tout à fait bien. Peut-être que cela conviendra également au vôtre.


9
Pour mémoire: pyexiv2 semble être le mieux entretenu de tous, et le plus complet (y compris l'écriture des balises EXIF ​​dans le fichier).
rbp

1
Pyexiv2 peut-il être facilement installé dans un virtualenv?
Matt Austin

2
La maintenance semble ralentie et l'installation sur Mac est un enfer. : /
Vortexfive

6
Pour ceux qui se soucient: Malheureusement, pyexiv2 n'est disponible que pour Python 2.
texnic

1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Cela fonctionnera aussi bien avec Python 2 ou 3, ce qui fait de GExiv2 un excellent remplacement pour pyexiv2, qui ne prend en charge que Python 2. </QUOTE>
jno

31

Solutions basées sur Exiv2

Exiv2 (exiv2: http://exiv2.org/ ) est une bibliothèque C ++ mature et open source qui prend en charge la lecture et l'écriture de métadonnées dans de nombreux types d'images (JPEG, PNG, TIFF et de nombreux formats bruts), comprend la norme (Xmp, IPTC et Exif) et des métadonnées non standard («Makernotes»), et fonctionne sur plusieurs plates-formes (Windows, Linux et, avec un peu de travail, Mac).

Les liaisons Python à exiv2 sont:

L'un des avantages de pyexiv2 est qu'il existe une version Windows disponible pour python 2.7. Une demande de build Windows pour gexiv2 est ici: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 et les liaisons sont toutes open source (GPL).


mis à jour ceci en fonction des dernières informations sur les liaisons à exiv2
dlm

pyexiv2a été forké: py3exiv2.tuxfamily.org .
Artem Klevtsov

tilloy.net link dead
jtlz2

5

Cet article décrit un module Python permettant d'écrire des métadonnées EXIF ​​(et pas seulement de les lire) à l'aide de Python pur. Apparemment, aucun de PIL, pyexif, ni EXIF-py ne prend en charge l'écriture EXIF. pyexiv2 semble être à la pointe de la technologie et spécifique à la plate-forme.


Je ne sais pas si cela peut être considéré comme moins saignant.
Mad Physicist

5

Utilisez 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 ne permet pas de modifier les balises EXIF. Mais il y a une petite bibliothèque aidant avec ça: github.com/hMatoba/Pyxif
Simon Steinberger

4

La page à http://redmine.yorba.org/projects/gexiv2/wiki (devenue https://wiki.gnome.org/Projects/gexiv2 ) se lit maintenant :

Cela fonctionnera aussi bien avec Python 2 ou 3, ce qui fait de GExiv2 un excellent remplacement pour pyexiv2, qui ne prend en charge que Python 2.

Ainsi, Python2 et Python3 sont désormais pris en charge par GExiv2.

Bonnes nouvelles.


2
Le lien ne fonctionne pas. cela fonctionne wiki.gnome.org/Projects/gexiv2
user881300

bonne mise à jour! 3 ans se sont écoulés depuis 2013 ...
jno

3

Vous pouvez également consulter la bibliothèque jpeg.py de Gheorghe Milas à l' adresse http://www.emilas.com/jpeg/ , qui est «Une bibliothèque python pour analyser, lire et écrire des métadonnées JPEG EXIF, IPTC et COM».

Un inconvénient est qu'il semble héberger son domaine sur une IP dynamique via DynDNS, donc ce n'est pas toujours disponible.


N'existe plus.
Simon Steinberger

3

d'une manière ou d'une autre, j'obtiens une erreur attributeError pour _getexif avec le code de Paolo ci-dessus .. J'utilise Python 2.6.6 et PIL 1.1.7. _Getexif est-il obsolète maintenant ??

Voici une petite modification qui a fonctionné pour moi.

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

J'ai commencé à écrire ma propre petite bibliothèque basée sur le code en PIL. vérifiez-le ici .


1
Hé, ça a l'air bien. Des arêtes vives avec?
Riche du

@Rich: Je ne me souviens plus. ça a marché pour moi.
Albert

3

J'ai utilisé mes propres wrappers autour de http://www.sno.phy.queensu.ca/~phil/exiftool/ - la raison en est qu'il est très complet, le développeur est très actif. Et ne pas être en mesure de prendre en charge presque tous les formats d'image est un véritable coup d'arrêt pour le projet pour lequel il est nécessaire

L'inconvénient est bien sûr que ce n'est pas python, vous devrez donc utiliser des appels de sous-processus, comme je le fais.


Il existe un wrapper python pour exiftool github.com/smarnach/pyexiftool . Un vote pour exiftool pour le fait qu'il soit très complet.
Long Vu

Il demande une bibliothèque Python.
Diego Woitasen


0

Dans Python 2.6, la place du module est différente. Utilisez ceci:

import Image    
from ExifTags import TAGS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.