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ł?
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.
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.
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 importImagefrom PIL.ExifTagsimport TAGSdef get_exif(fn):
ret ={}
i =Image.open(fn)
info = i._getexif()for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded]= valuereturn 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. :)
Ż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.
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).
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
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.
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.
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 importImagefrom PIL.ExifTagsimport TAGSdef get_exif(fn):
ret ={}
i =Image.open(fn)# info = i._getexif()
info = i.tag.tagsfor tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded]= valuereturn ret
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.
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.Odpowiedzi:
Możesz sprawdzić exif-py :
lub Python Imaging Library (PIL) :
Jest też trafnie nazwany pyexif: http://pyexif.sourceforge.net/
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ć:
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. :)
źródło
pip
! github.com/python-pillow/PillowSam 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
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).
źródło
pyexiv2
został rozwidlony: py3exiv2.tuxfamily.org .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.
źródło
Użyj PIL :)
źródło
Strona pod adresem http://redmine.yorba.org/projects/gexiv2/wiki (stała się https://wiki.gnome.org/Projects/gexiv2 ) czyta teraz :
Tak więc zarówno Python2, jak i Python3 są teraz obsługiwane przez GExiv2.
Dobre wieści.
źródło
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
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.
źródło
Zacząłem pisać własną małą bibliotekę opartą na kodzie z PIL. sprawdź to tutaj .
źródło
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.
źródło
Istnieje kilka przykładów PIL i EXIF.py użytkowania na ASPN
źródło
W Pythonie 2.6 miejsce modułu jest inne. Użyj tego:
źródło