Я ищу хорошую библиотеку манипулирования exif (Exchangeable image file format) для python. Я предпочитаю гибкость (например, возможность извлекать проприетарные теги провайдеров), а не скорость обработки. Что ты предлагаешь?
Библиотека манипулирования Exif для python [закрыта]
Ответы (12)
Вы можете проверить exif-py:
Библиотека Python для извлечения данных EXIF из файлов tiff и jpeg. Очень прост в использовании — $ ./EXIF.py image.jpg
или Библиотека образов Python (PIL):
Библиотека изображений Python (PIL) добавляет возможности обработки изображений в ваш интерпретатор Python. Эта библиотека поддерживает множество форматов файлов и предоставляет мощные возможности обработки изображений и графики.
Существует также метко названный pyexif: http://pyexif.sourceforge.net/
Библиотека и инструменты Python pyexif предназначены для извлечения информации 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. :)
pip
! github.com/python-pillow/Pillow
- person ibizaman; 10.08.2014
Недавно я сам использовал 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).
В этой статье описывается модуль Python для записи метаданных EXIF (а не только их чтения) с использованием чистого Python. Судя по всему, ни PIL, ни pyexif, ни EXIF-py не поддерживают запись EXIF. pyexiv2 кажется передовым и специфичным для платформы.
Используйте ПИЛ :)
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')
Страница по адресу http://redmine.yorba.org/projects/gexiv2/wiki. (стало https://wiki.gnome.org/Projects/gexiv2) читается как сейчас:
Это будет одинаково хорошо работать как с Python 2, так и с Python 3, что делает GExiv2 отличной заменой pyexiv2, который поддерживает только Python 2.
Итак, и Python2, и Python3 теперь поддерживаются GExiv2.
Хорошие новости.
Вы также можете посмотреть библиотеку jpeg.py Георге Миласа по адресу http://www.emilas.com/jpeg/, которая представляет собой «библиотеку Python для анализа, чтения и записи метаданных JPEG EXIF, IPTC и COM».
Недостатком является то, что он размещает свой домен на динамическом IP-адресе через DynDNS, поэтому он не всегда доступен.
каким-то образом я получаю attributeError для _getexif с кодом Паоло выше. Я использую 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
Я начал писать свою небольшую библиотеку, основанную на коде в PIL. проверьте это здесь.
Я использую свои собственные оболочки для http://www.sno.phy.queensu.ca/~phil/exiftool/ -- причина в том, что он очень полный, разработчик очень активен. И неспособность поддерживать почти все форматы изображений является абсолютным препятствием для проекта, для которого она необходима.
Недостатком, конечно, является то, что это не python, поэтому вам нужно будет использовать вызовы подпроцессов, как я.
Есть несколько примеров использования PIL и EXIF.py в ASPN.
В Python 2.6 место модуля другое. Использовать это:
import Image
from ExifTags import TAGS
MakerNote
. В этот тег EXIF производители камер добавляют свои собственные теги, содержащие ценную информацию. Таким образом, вы получите только основные теги с большинством библиотек из приведенных ниже ответов. - person user136036   schedule 13.02.2020