Biblioteka manipulacji Exif dla Pythona [zamknięta]

108

Szukam dobrej biblioteki do manipulacji exif (wymienny format pliku obrazu) dla Pythona. Wolę elastyczność (np. Możliwość pobierania zastrzeżonych tagów dostawców) niż szybkość przetwarzania. Co byś zasugerował?

oo_olo_oo
źródło
Być może pytanie powinno brzmieć: „Jakie opcje są dostępne do edycji Exif (wymienny format pliku obrazu) za pomocą Pythona, które kładą nacisk na zestaw funkcji (np. Możliwość pobierania zastrzeżonych tagów dostawców i zgodność z szeroką gamą formatów obrazów) ponad szybkość?”
dlm
1
@Wooble et al: „Jeśli można przeformułować to pytanie, aby pasowało do zasad w centrum pomocy, zmień je lub zostaw komentarz”. Zrobiłem to drugie, ale Q zamknął się bez dalszych komentarzy. Co daje? (Próbuję tylko zrozumieć i nie chcę tracić czasu na komentowanie / edytowanie pytań, jeśli jest to z góry przesądzone)
dlm
Pytałem o opinie innych deweloperów! PackageOpinionOverflow?
Derek Litz
1
Należy pamiętać, że prawie wszystkie rozwiązania inne niż exiv2 tutaj nie będą miały dostępu MakerNote. W tym tagu EXIF ​​producenci aparatów dodają własne tagi, które zawierają cenne informacje. Tak więc z poniższych odpowiedzi uzyskasz tylko podstawowe tagi dla większości bibliotek.
user136036

Odpowiedzi:

65

Możesz sprawdzić exif-py :

Biblioteka Pythona do wyodrębniania danych EXIF ​​z plików tiff i jpeg. Bardzo łatwy w użyciu - $ ./EXIF.py image.jpg

lub Python Imaging Library (PIL) :

Python Imaging Library (PIL) dodaje możliwości przetwarzania obrazu do twojego interpretera Pythona. Ta biblioteka obsługuje wiele formatów plików i zapewnia potężne możliwości przetwarzania obrazu i grafiki.

Jest też trafnie nazwany pyexif: http://pyexif.sourceforge.net/

Biblioteka i narzędzia pyexif python mają na celu wyodrębnienie informacji EXIF ​​z plików Jpeg i Tiff, które je zawierają. Informacje te są zwykle zawarte w obrazach utworzonych za pomocą cyfrowych urządzeń do przetwarzania obrazu, takich jak aparaty cyfrowe, cyfrowe skanery filmów itp.

Wygląda jednak na to, że pyexif nie był aktualizowany od dłuższego czasu. Zalecają, jeśli ich nie robią sztuczki, aby sprawdzić EXIF-py, więc prawdopodobnie powinieneś najpierw spróbować tego, ponieważ ich strona sourceforge wydaje się ostatnio mieć tam jakąś aktywność, choć niewiele. Wreszcie, używając PIL, możesz to zrobić:

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

Zastrzeżenie :
Właściwie nie mam pojęcia, co jest najlepsze, to właśnie udało mi się złożyć razem z Google. :)

Paolo Bergantino
źródło
20
Żadne z tych „rozwiązań” nie może ponownie zapisywać tagów EXIF, więc nie stanowią one rozwiązania tego pytania.
odinho
23
Chociaż technicznie nie pozwala na pisanie tagów EXIF, uznałem to za bardzo przydatne. +1 za napisanie kodu.
Cerin
3
Brak PIL dla Pythona 3.x
więcej niż pięć
Niezły przegląd. Tylko uwaga: wydaje się, że exif-py nie jest obecnie kompatybilny z Pythonem 3.x (testowany z Pythonem 3.3.3, zobacz także github.com/ianare/exif-py/issues/12 ).
cel
3
@MoreThanFive Jest widelec PIL, który jest mocno konserwowany i który się z nim integruje pip! github.com/python-pillow/Pillow
ibizaman
59

Sam ostatnio używam pyexiv2 i wydaje się, że całkiem dobrze pasuje do moich potrzeb. Być może może pasować również do twojego.


źródło
9
Dla przypomnienia: pyexiv2 wydaje się być najlepiej utrzymanym z nich wszystkich i najbardziej kompletnym (łącznie z zapisywaniem znaczników EXIF ​​z powrotem do pliku).
rbp
1
Czy pyexiv2 można łatwo zainstalować w virtualenv?
Matt Austin
2
Konserwacja wydaje się być spowolniona, a instalacja na Macu to piekło. : /
Vortexfive,
6
Dla tych, którym zależy: niestety pyexiv2 jest dostępne tylko dla Pythona 2.
texnic
1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Będzie to działać równie dobrze z Pythonem 2 lub 3, co sprawia, że ​​GExiv2 jest doskonałym zamiennikiem pyexiv2, który obsługuje tylko Python 2. </QUOTE>
jno
31

Rozwiązania oparte na Exiv2

Exiv2 (exiv2: http://exiv2.org/ ) to dojrzała biblioteka C ++ o otwartym kodzie źródłowym, która obsługuje odczytywanie i zapisywanie metadanych do wielu typów obrazów (JPEG, PNG, TIFF i wiele formatów RAW), rozumie standardy (Xmp, IPTC i Exif) i niestandardowych metadanych („Makernotes”) i działa na wielu platformach (Windows, Linux i, w niektórych przypadkach, Mac).

Wiązania Pythona z exiv2 to:

Jedną z zalet pyexiv2 jest to, że dostępna jest kompilacja systemu Windows dla Pythona 2.7. Żądanie kompilacji systemu Windows dla gexiv2 jest tutaj: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 i powiązania są open source (GPL).

dlm
źródło
zaktualizowałem to na podstawie najnowszych informacji o wiązaniach do
exiv2
pyexiv2został rozwidlony: py3exiv2.tuxfamily.org .
Artem Klevtsov
Link do tilloy.net nie żyje
jtlz2
5

W tym artykule opisano moduł Pythona do pisania metadanych EXIF ​​(a nie tylko ich odczytywania) przy użyciu czystego języka Python. Najwyraźniej żaden z PIL, pyexif ani EXIF-py nie obsługuje pisania EXIF. pyexiv2 wydaje się być ostry i specyficzny dla platformy.

Jason R. Coombs
źródło
Nie jestem pewien, czy można to uznać za mniej krwawiącą krawędź.
Mad Physicist,
5

Użyj 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')
Maks
źródło
1
Pure PIL / Pillow nie pozwala na modyfikowanie tagów EXIF. Ale pomaga w tym mała biblioteka: github.com/hMatoba/Pyxif
Simon Steinberger
4

Strona pod adresem http://redmine.yorba.org/projects/gexiv2/wiki (stała się https://wiki.gnome.org/Projects/gexiv2 ) czyta teraz :

Będzie to działać równie dobrze z Pythonem 2 lub 3, co sprawia, że ​​GExiv2 jest doskonałym zamiennikiem pyexiv2, który obsługuje tylko Python 2.

Tak więc zarówno Python2, jak i Python3 są teraz obsługiwane przez GExiv2.

Dobre wieści.

jno
źródło
2
link nie działa. to działa wiki.gnome.org/Projects/gexiv2
user881300
dobra aktualizacja! Minęły 3 lata od 2013 roku ...
jno
3

Możesz również zajrzeć do biblioteki jpeg.py Gheorghe Milasa pod adresem http://www.emilas.com/jpeg/ , która jest „biblioteką Pythona do analizowania, odczytywania i zapisywania metadanych JPEG EXIF, IPTC i COM”.

Wadą jest to, że wydaje się, że hostuje swoją domenę na dynamicznym adresie IP za pośrednictwem DynDNS, więc nie zawsze jest dostępna.


źródło
Już nie istnieje.
Simon Steinberger
3

w jakiś sposób otrzymuję attributeError dla _getexif z powyższym kodem Paolo .. Używam Pythona 2.6.6 i PIL 1.1.7. Czy _getexif jest teraz przestarzały?

Oto mała modyfikacja, która zadziałała dla mnie.

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
wydra
źródło
3

Zacząłem pisać własną małą bibliotekę opartą na kodzie z PIL. sprawdź to tutaj .

Albert
źródło
1
Hej, to wygląda dobrze. Jakieś ostre krawędzie?
Rich
@Rich: Już nie pamiętam. Na mnie zadziałało.
Albert
3

Używałem własnych wrapperów wokół http://www.sno.phy.queensu.ca/~phil/exiftool/ - powodem jest to, że jest bardzo kompletny, programista jest bardzo aktywny. A brak obsługi prawie wszystkich formatów graficznych jest absolutną przeszkodą dla projektu, do którego jest potrzebny

Wadą jest oczywiście to, że nie jest to Python, więc tak jak ja musiałbyś używać wywołań podprocesu.

Geert Dekkers
źródło
Istnieje opakowanie Pythona dla exiftool github.com/smarnach/pyexiftool . Jeden głos na exiftool za to, że jest bardzo kompletny.
Long Vu
Prosi o bibliotekę Pythona.
Diego Woitasen
1

Istnieje kilka przykładów PIL i EXIF.py użytkowania na ASPN

Michał Niklas
źródło
0

W Pythonie 2.6 miejsce modułu jest inne. Użyj tego:

import Image    
from ExifTags import TAGS
Tomasz Nazar
źródło