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:

Одним из преимуществ 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

Есть несколько примеров использования PIL и EXIF.py в ASPN.

В Python 2.6 место модуля отличается. Использовать этот:

import Image    
from ExifTags import TAGS
Другие вопросы по тегам