Библиотека манипуляций Exif для Python [закрыто]

108

Я ищу хорошую библиотеку для манипуляций exif (Exchangeable image file format) для Python. Я предпочитаю гибкость (например, возможность получать собственные теги провайдеров), чем скорость обработки. Что ты предлагаешь?

oo_olo_oo
источник
Возможно, вопрос должен звучать так: «Какие параметры доступны для редактирования Exif (формат файла сменного изображения) с использованием Python, которые подчеркивают набор функций (например, возможность извлекать собственные теги провайдеров и совместимость с широким спектром форматов изображений) по скорости?»
dlm
1
@Wooble et al: «Если этот вопрос можно изменить, чтобы он соответствовал правилам справочного центра, пожалуйста, отредактируйте вопрос или оставьте комментарий». Я сделал последнее, но Q закрылся без дальнейших комментариев. Что дает? (Просто пытаюсь понять и не хочу тратить время на комментирование / редактирование вопросов, если это предрешено)
dlm
Я хотел узнать мнение других разработчиков, задавая этот вопрос! PackageOpinionOverflow?
Дерек Литц
1
Имейте в виду, что почти все решения, не относящиеся к exiv2, не будут иметь доступа MakerNote. В этот тег EXIF ​​производители камер добавляют свои собственные теги, содержащие ценную информацию. Таким образом, вы получите только основные теги с большинством библиотек из приведенных ниже ответов.
user136036

Ответы:

65

Возможно, вы захотите проверить exif-py :

Библиотека Python для извлечения данных EXIF ​​из файлов tiff и jpeg. Очень просто использовать - $ ./EXIF.py image.jpg

или библиотека изображений Python (PIL) :

Библиотека изображений Python (PIL) добавляет в интерпретатор Python возможности обработки изображений. Эта библиотека поддерживает множество форматов файлов и предоставляет мощные возможности обработки изображений и графики.

Также есть метко названный pyexif: http://pyexif.sourceforge.net/

Библиотека и инструменты pyexif 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. :)

Паоло Бергантино
источник
20
Ни одно из этих «решений» не может записывать теги EXIF ​​обратно, поэтому они не являются решением вопроса.
odinho - Velmont
23
Хотя технически не позволяет писать теги EXIF, я нашел это очень полезным. +1 за написание кода.
Cerin
3
Нет PIL для Python 3.x
Более пяти
Хороший обзор. Просто примечание: exif-py в настоящее время, похоже, несовместим с Python 3.x (проверено с Python 3.3.3, см. Также github.com/ianare/exif-py/issues/12 ).
чел
3
@MoreThanFive Существует форк PIL, который сильно поддерживается и интегрируется с pip! github.com/python-pillow/Pillow
ibizaman
59

Я сам недавно использовал pyexiv2 , и, похоже, он очень хорошо соответствует моим потребностям. Возможно, это подойдет и вам.


источник
9
Для справки: pyexiv2 кажется наиболее поддерживаемым из всех и наиболее полным (включая запись тегов EXIF ​​обратно в файл).
rbp
1
Можно ли легко установить pyexiv2 внутри виртуального окружения?
Мэтт Остин
2
Обслуживание кажется замедленным, а установка на Mac - это ад. : /
Vortexfive
6
Для тех, кому не все равно: к сожалению, pyexiv2 доступен только для Python 2.
texnic
1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Это будет одинаково хорошо работать как с Python 2, так и с 3, что делает GExiv2 отличной заменой pyexiv2, который поддерживает только Python 2. </QUOTE>
jno
31

Решения на базе 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).

dlm
источник
обновил это на основе последней информации о привязках к exiv2
dlm
pyexiv2был разветвлен: py3exiv2.tuxfamily.org .
Артем Клевцов
ссылка tilloy.net мертва
jtlz2
5

В этой статье описывается модуль Python для записи метаданных EXIF ​​(а не только их чтения) с использованием чистого Python. Судя по всему, ни PIL, ни pyexif, ни EXIF-py не поддерживают запись EXIF. pyexiv2, похоже, является передовым и специфичным для платформы.

Джейсон Р. Кумбс
источник
Не уверен, что это можно считать менее передовым.
Mad Physicist
5

Используйте 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')
Максимум
источник
1
Pure PIL / Pillow не позволяет изменять теги EXIF. Но есть небольшая библиотека, помогающая в этом: github.com/hMatoba/Pyxif
Саймон Штейнбергер
4

Страница http://redmine.yorba.org/projects/gexiv2/wiki (стала https://wiki.gnome.org/Projects/gexiv2 ) теперь гласит :

Это будет одинаково хорошо работать с Python 2 или 3, что делает GExiv2 отличной заменой pyexiv2, который поддерживает только Python 2.

Итак, как Python2, так и Python3 теперь поддерживаются GExiv2.

Хорошие новости.

Jno
источник
2
Ссылка не работает. это работает wiki.gnome.org/Projects/gexiv2
user881300
хорошее обновление! С 2013 года прошло 3 года ...
jno
3

Вы также можете посмотреть библиотеку jpeg.py Георгия Миласа по адресу http://www.emilas.com/jpeg/ , которая представляет собой «Библиотеку Python для анализа, чтения и записи метаданных JPEG EXIF, IPTC и COM».

Недостатком является то, что он, похоже, размещает свой домен на динамическом IP-адресе через DynDNS, поэтому он не всегда доступен.


источник
Больше не существует.
Саймон Штайнбергер
3

каким-то образом я получаю 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
оттерб
источник
3

Я начал писать свою небольшую библиотеку, основанную на коде в PIL. проверьте это здесь .

Альберт
источник
1
Эй, выглядит хорошо. Какие-нибудь острые углы?
Rich
@Rich: Я больше не помню. У меня это сработало.
Альберт
3

Я использовал свои собственные обертки вокруг http://www.sno.phy.queensu.ca/~phil/exiftool/ - причина в том, что он очень полный, разработчик очень активен. И невозможность поддерживать почти все форматы изображений является абсолютным препятствием для проекта, для которого он необходим.

Недостатком, конечно же, является то, что это не python, поэтому вам нужно будет использовать вызовы подпроцесса, как это делаю я.

Герт Деккерс
источник
Есть оболочка python для exiftool github.com/smarnach/pyexiftool . Один голос за exiftool за то, что он очень полный.
Long Vu
Он просит библиотеку Python.
Diego Woitasen
1

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

Михал Никлас
источник
0

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

import Image    
from ExifTags import TAGS
Томаш Назар
источник