web-dev-qa-db-fra.com

Bibliothèque de manipulation Exif pour python

Je cherche une bonne bibliothèque de manipulation exif (format de fichier image échangeable) pour python. Je préfère la flexibilité (par exemple, la capacité de récupérer les étiquettes propriétaires des fournisseurs) à la vitesse de traitement. Que suggérerais-tu?

106
oo_olo_oo

Vous voudrez peut-être vérifier exif-py :

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

ou le Python Imaging Library (PIL) :

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

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

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

Cependant, il semble que pyexif n'ait pas été mis à jour depuis assez longtemps. Ils recommandent que si leur ne fait pas le tour pour vérifier EXIF-py, alors vous devriez probablement essayer celui-là en premier, car leur page sourceforge semble avoir certains activité là-bas 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

Clause de non-responsabilité :
En fait, je ne sais pas du tout ce qui convient le mieux. C’est ce que j’ai pu rassembler avec Google. :)

62
Paolo Bergantino

J'utilise pyexiv2 moi-même récemment, et il semble bien répondre à mes besoins. Cela conviendra peut-être aussi au vôtre.

58
user25148

Solutions basées sur Exiv2

Exiv2 (exiv2: http://exiv2.org/ ) est une bibliothèque mature et open source C++ qui prend en charge la lecture et l'écriture de métadonnées sur de nombreux types d'images (JPEG, PNG, TIFF et de nombreux formats bruts). , comprend les métadonnées standard ("Makernotes") et non standard (Xmp, IPTC et Exif), et s’exécute sur plusieurs plates-formes (Windows, Linux et, avec certains travaux, Mac).

Les liaisons Python à exiv2 sont:

Un avantage de pyexiv2 est qu’il existe une version Windows disponible pour python 2.7. Une demande de construction Windows pour gexiv2 est ici: https://bugzilla.gnome.org/show_bug. cgi? id = 712441

exiv2 et les liaisons sont tous à code source ouvert (GPL).

30
dlm

Utilisez PIL :)

import os,sys
from PIL import Image
from PIL.ExifTags import TAGS

if __== '__main__':
    for (k,v) in Image.open(sys.argv[1])._getexif().iteritems():
        print '%s = %s' % (TAGS.get(k), v)
    os.system('pause')
5
Max

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 support PIL, pyexif, ni EXIF-py L'écriture EXIF ​​pyexiv2 semble être spécifique à la plateforme et à la taille.

5
Jason R. Coombs

La page sur http://redmine.yorba.org/projects/gexiv2/wiki se lit maintenant :

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

Ainsi, à la fois Python2 et Python3 sont maintenant supportés par GExiv2.

Bonnes nouvelles.

4
jno

J'utilise mes propres wrappers http://www.sno.phy.queensu.ca/~phil/exiftool/ - c'est parce qu'il est très complet, le dev est très actif . Et ne pas être en mesure de prendre en charge presque tous les formats d'image est un obstacle absolu pour le projet dont il a besoin pour

Bien sûr, l’inconvénient est qu’il ne s’agit pas de python. Vous devez donc utiliser des appels de sous-processus, comme je le fais.

3
Geert Dekkers

Vous pouvez également consulter la bibliothèque jpeg.py de Gheorghe Milas à l’adresse http://www.emilas.com/jpeg/ , qui est "A python bibliothèque à analyser , lisez et écrivez les métadonnées JPEG EXIF, IPTC et COM. "

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

3
Alan Miller

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

3
Albert

en quelque sorte, j'obtiens un attributeError pour _getexif avec le code de Paolo ci-dessus. J'utilise Python 2.6.6 et PIL 1.1.7. Est-ce que _getexif est 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
otterb

Il existe quelques exemples d’utilisation de PIL et EXIF.py sur ASPN

1
Michał Niklas

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

import Image    
from ExifTags import TAGS
0
Tomasz Nazar