Exif библиотека манипуляций для Python
Я ищу хорошую библиотеку манипуляций exif (Exchangeable image file format) для python. Я предпочитаю гибкость (например, возможность извлекать проприетарные теги провайдеров), чем скорость обработки. Что ты предлагаешь?
12 ответов
Вы можете проверить exif-py:
Библиотека Python для извлечения данных EXIF из файлов TIFF и JPEG. Очень прост в использовании - $ ./EXIF.py image.jpg
или Библиотека изображений Python (PIL):
Библиотека изображений Python (PIL) добавляет возможности обработки изображений для вашего интерпретатора Python. Эта библиотека поддерживает множество форматов файлов и предоставляет мощные возможности обработки изображений и графики.
Также есть метко названный pyexif: http://pyexif.sourceforge.net/
Python-библиотека и инструменты Python нацелены на извлечение информации EXIF из файлов Jpeg и Tiff, которые ее содержат. Эта информация обычно включается в изображения, созданные с использованием цифровых устройств обработки изображений, таких как цифровые камеры, цифровые пленочные сканеры и т. Д.
Тем не менее, похоже, что pyexif не обновлялся довольно давно. Они рекомендуют, если они не делают трюк, чтобы проверить EXIF-py, так что вы, вероятно, должны сначала попробовать это, так как их страница sourceforge в последнее время, кажется, имеет некоторую активность, хотя и незначительную. Наконец, используя PIL, вы можете сделать это:
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
Отказ от ответственности:
На самом деле я понятия не имею, что лучше, это то, что я смог собрать вместе с Google.:)
Я недавно использовал pyexiv2, и он, кажется, вполне соответствует моим потребностям. Возможно, это может подойти и вам.
Решения на базе Exiv2
Exiv2 (exiv2: http://exiv2.org/) - это зрелая библиотека C++ с открытым исходным кодом, которая поддерживает чтение и запись метаданных для многих типов изображений (JPEG, PNG, TIFF и многих необработанных форматов), понимает стандарты (Xmp, IPTC и Exif) и нестандартные метаданные ("Makernotes"), и работает на нескольких платформах (Windows, Linux и, с некоторой работой, Mac).
Привязки Python к exiv2:
- gexiv2 (многоязыковая привязка, но работает с python 2.6 / 2.7 / 3.X): https://wiki.gnome.org/gexiv2
- pyexiv2 (больше не поддерживается, но работает с python 2.6 / 2.7): http://tilloy.net/dev/pyexiv2/
Одним из преимуществ pyexiv2 является то, что для Python 2.7 доступна сборка Windows. Запрос сборки Windows для gexiv2 находится здесь: https://bugzilla.gnome.org/show_bug.cgi?id=712441
exiv2 и привязки все с открытым исходным кодом (GPL).
Используйте 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')
В этой статье описывается модуль Python для записи метаданных EXIF (а не просто их чтения) с использованием чистого Python. Очевидно, что ни PIL, ни pyexif, ни EXIF-py не поддерживают запись EXIF. pyexiv2, кажется, является передовым и специфичным для платформы.
Страница по адресу http://redmine.yorba.org/projects/gexiv2/wiki гласит:
Это будет одинаково хорошо работать с Python 2 или 3, что делает GExiv2 отличной заменой pyexiv2, который поддерживает только Python 2.
Итак, и Python2, и Python3 теперь поддерживаются GExiv2.
Хорошие новости.
Я использовал свои собственные обертки вокруг http://www.sno.phy.queensu.ca/~phil/exiftool/- причина в том, что он очень полный, разработчик очень активен. И неспособность поддерживать почти все форматы изображений - абсолютный демонстратор возможностей для проекта, для которого это необходимо.
Недостаток, конечно, в том, что это не Python, поэтому вам, как и мне, нужно использовать вызовы подпроцесса.
Вы также можете посмотреть библиотеку jpeg.py Георгия Миласа по адресу http://www.emilas.com/jpeg/, которая называется "Библиотека Python для анализа, чтения и записи метаданных JPEG EXIF, IPTC и COM".
Недостатком является то, что он, кажется, размещает свой домен на динамическом IP через DynDNS, поэтому он не всегда доступен.
Я начал писать свою маленькую библиотеку, основанную на коде в PIL. проверьте это здесь.
Каким -то образом я получаю attributeError для _getexif с кодом Paolo выше.. Я использую Python 2.6.6 и PIL 1.1.7. _Getexif устарел сейчас??
Вот небольшая модификация, которая сработала для меня.
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
В Python 2.6 место модуля отличается. Использовать этот:
import Image
from ExifTags import TAGS