Exif-Manipulationsbibliothek für Python [geschlossen]


108

Ich suche nach einer guten exif-Manipulationsbibliothek (Exchangeable Image File Format) für Python. Ich bevorzuge Flexibilität (z. B. die Fähigkeit, proprietäre Tags von Anbietern abzurufen) gegenüber Verarbeitungsgeschwindigkeit. Was würdest du vorschlagen?


Vielleicht sollte die Frage lauten: "Welche Optionen stehen zur Verfügung, um Exif (austauschbares Bilddateiformat) mit Python zu bearbeiten, wobei der Funktionsumfang (z. B. die Möglichkeit, proprietäre Tags von Anbietern abzurufen, und die Kompatibilität mit einer Vielzahl von Bildformaten) über die Geschwindigkeit hinaus hervorgehoben wird?"
dlm

1
@Wooble et al.: "Wenn diese Frage entsprechend den Regeln in der Hilfe umformuliert werden kann, bearbeiten Sie die Frage oder hinterlassen Sie einen Kommentar." Ich habe Letzteres getan, aber das Q wurde ohne weiteren Kommentar geschlossen. Was gibt? (Ich versuche nur zu verstehen und möchte keine Zeit damit verschwenden, Fragen zu kommentieren / zu bearbeiten, wenn dies eine ausgemachte Sache ist.)
dlm

Ich wollte die Meinung anderer Entwickler, wenn ich diese Frage stelle! PackageOpinionOverflow?
Derek Litz

1
Beachten Sie, dass so gut wie alle Nicht-Exiv2-Lösungen hier nicht darauf zugreifen können MakerNote. In diesem EXIF-Tag fügen Kamerahersteller ihre eigenen Tags hinzu, die wertvolle Informationen enthalten. Sie würden also nur die grundlegenden Tags mit den meisten Bibliotheken aus den folgenden Antworten erhalten.
user136036

Antworten:


65

Vielleicht möchten Sie sich exif-py ansehen :

Python-Bibliothek zum Extrahieren von EXIF-Daten aus TIFF- und JPEG-Dateien. Sehr einfach zu bedienen - $ ./EXIF.py image.jpg

oder die Python Imaging Library (PIL) :

Die Python Imaging Library (PIL) erweitert Ihren Python-Interpreter um Bildverarbeitungsfunktionen. Diese Bibliothek unterstützt viele Dateiformate und bietet leistungsstarke Bildverarbeitungs- und Grafikfunktionen.

Es gibt auch das treffend benannte pyexif: http://pyexif.sourceforge.net/

Die Pyexif-Python-Bibliothek und -Tools zielen darauf ab, EXIF-Informationen aus JPEG- und Tiff-Dateien zu extrahieren, die sie enthalten. Diese Informationen sind normalerweise in Bildern enthalten, die mit digitalen Bildgebungsgeräten wie Digitalkameras, digitalen Filmscannern usw. erstellt wurden.

Es sieht jedoch so aus, als ob Pyexif seit einiger Zeit nicht mehr aktualisiert wurde. Sie empfehlen, wenn sie nicht den Trick machen, EXIF-py zu testen, also sollten Sie es wahrscheinlich zuerst versuchen, da ihre SourceForge-Seite in letzter Zeit einige Aktivitäten zu haben scheint , wenn auch nicht viel. Mit PIL können Sie Folgendes tun:

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

Haftungsausschluss :
Ich habe eigentlich keine Ahnung, was am besten ist. Genau das konnte ich mit Google zusammenstellen. :) :)


19
Keine dieser "Lösungen" kann EXIF-Tags zurückschreiben, daher sind sie keine Lösung für die Frage.
Odinho - Velmont

22
Obwohl das Schreiben von EXIF-Tags technisch nicht möglich ist, fand ich dies sehr nützlich. +1 zum Schreiben von Code.
Cerin

3
Kein PIL für Python 3.x
Mehr als fünf

Schöne Übersicht. Nur ein Hinweis: exif-py ist derzeit anscheinend nicht mit Python 3.x kompatibel (getestet mit Python 3.3.3, siehe auch github.com/ianare/exif-py/issues/12 ).
Cel

3
@MoreThanFive Es gibt eine PIL-Gabel, die stark gewartet wird und in die integriert wird pip! github.com/python-pillow/Pillow
ibizaman

59

Ich habe pyexiv2 in letzter Zeit selbst verwendet und es scheint ganz gut zu meinen Bedürfnissen zu passen. Vielleicht passt es auch zu Ihnen.


9
Für die Aufzeichnung: pyexiv2 scheint das am besten gewartete von allen und das vollständigste zu sein (einschließlich des Zurückschreibens von EXIF-Tags in die Datei).
Rbp

1
Kann pyexiv2 einfach in einer virtuellen Umgebung installiert werden?
Matt Austin

2
Die Wartung scheint verlangsamt zu sein, und die Installation auf dem Mac ist eine Hölle. : /
Vortexfive

6
Für diejenigen, die sich interessieren: Leider ist pyexiv2 nur für Python 2 verfügbar.
texnic

1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Dies funktioniert genauso gut mit Python 2 oder 3, was GExiv2 zu einem hervorragenden Ersatz für pyexiv2 macht, das nur Python 2 unterstützt. </ QUOTE>
jno

31

Exiv2-basierte Lösungen

Exiv2 (exiv2: http://exiv2.org/ ) ist eine ausgereifte Open-Source-C ++ - Bibliothek, die das Lesen und Schreiben von Metadaten in viele Bildtypen (JPEG, PNG, TIFF und viele Rohformate) unterstützt und Standard (Xmp, IPTC) versteht und Exif) und nicht standardmäßige Metadaten ("Makernotes") und läuft auf mehreren Plattformen (Windows, Linux und mit etwas Arbeit Mac).

Python-Bindungen an exiv2 sind:

Ein Vorteil von pyexiv2 ist, dass für Python 2.7 ein Windows-Build verfügbar ist. Eine Windows-Build-Anfrage für gexiv2 finden Sie hier: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 und die Bindungen sind alle Open Source (GPL).


aktualisiert dies basierend auf den neuesten Informationen über Bindungen an exiv2
dlm

pyexiv2wurde gegabelt: py3exiv2.tuxfamily.org .
Artem Klevtsov

tilloy.net link dead
jtlz2

5

Dieser Artikel beschreibt ein Python-Modul zum Schreiben von EXIF-Metadaten (und nicht nur zum Lesen) mit reinem Python. Anscheinend unterstützt weder PIL, Pyexif noch EXIF-py das Schreiben von EXIF. pyexiv2 scheint auf dem neuesten Stand und plattformspezifisch zu sein.


Ich bin mir nicht sicher, ob dies als weniger blutig angesehen werden kann.
Verrückter Physiker

5

Verwenden Sie 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 erlaubt keine Änderung von EXIF-Tags. Aber es gibt eine kleine Bibliothek, die dabei hilft: github.com/hMatoba/Pyxif
Simon Steinberger

4

Die Seite unter http://redmine.yorba.org/projects/gexiv2/wiki (wurde zu https://wiki.gnome.org/Projects/gexiv2 ) lautet jetzt :

Dies funktioniert genauso gut mit Python 2 oder 3, was GExiv2 zu einem hervorragenden Ersatz für pyexiv2 macht, das nur Python 2 unterstützt.

Daher werden sowohl Python2 als auch Python3 jetzt von GExiv2 unterstützt.

Gute Nachrichten.


2
Der Link funktioniert nicht. Dies funktioniert wiki.gnome.org/Projects/gexiv2
user881300

gutes Update! 3 Jahre sind seit 2013 vergangen ...
jno

3

Sie können sich auch die jpeg.py-Bibliothek von Gheorghe Milas unter http://www.emilas.com/jpeg/ ansehen. Diese ist eine Python-Bibliothek zum Parsen, Lesen und Schreiben von JPEG EXIF-, IPTC- und COM-Metadaten.

Ein Nachteil ist, dass er seine Domain anscheinend über DynDNS auf einer dynamischen IP hostet, sodass sie nicht immer verfügbar ist.


Existiert nicht mehr.
Simon Steinberger

3

Irgendwie bekomme ich einen attributeError für _getexif mit Paolos Code oben. Ich benutze Python 2.6.6 und PIL 1.1.7. Ist _getexif jetzt veraltet?

Hier ist eine kleine Modifikation, die für mich funktioniert hat.

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

Ich fing an, meine eigene kleine Bibliothek zu schreiben, die auf dem Code in PIL basiert. Überprüfen Sie es hier .


1
Hey das sieht gut aus. Irgendwelche scharfen Kanten damit?
Rich

@ Rich: Ich erinnere mich nicht mehr. Es hat bei mir funktioniert.
Albert

3

Ich habe meine eigenen Wrapper um http://www.sno.phy.queensu.ca/~phil/exiftool/ verwendet - der Grund ist, dass es sehr vollständig ist, der Entwickler ist sehr aktiv. Und nicht alle Bildformate unterstützen zu können, ist ein absoluter Showstopper für das Projekt, für das es benötigt wird

Der Nachteil ist natürlich, dass es kein Python ist, so dass Sie wie ich Unterprozessaufrufe verwenden müssten.


Es gibt einen Python-Wrapper für exiftool github.com/smarnach/pyexiftool . Eine Stimme für exiftool für die Tatsache, dass es sehr vollständig ist.
Long Vu

Er bittet um eine Python-Bibliothek.
Diego Woitasen


0

In Python 2.6 ist der Ort des Moduls anders. Benutze das:

import Image    
from ExifTags import TAGS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.