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

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


person oo_olo_oo    schedule 19.04.2009    source источник
comment
Возможно, вопрос следует читать: Какие параметры доступны для редактирования Exif (формат файла изображения с возможностью обмена) с использованием python, которые подчеркивают набор функций (например, возможность извлекать проприетарные теги поставщиков и совместимость с широким спектром форматов изображений) по скорости?   -  person dlm    schedule 07.08.2013
comment
@Wooble и др.: Если этот вопрос можно переформулировать, чтобы он соответствовал правилам справочного центра, отредактируйте вопрос или оставьте комментарий. Я сделал последнее, но Q закрылся без дальнейших комментариев. Что дает? (Просто пытаюсь понять и не хочу тратить время на комментарии/редактирование вопросов, если это предрешено)   -  person dlm    schedule 12.08.2013
comment
Я хотел узнать мнение других разработчиков, когда задавал этот вопрос! PackageOpinionOverflow?   -  person Derek Litz    schedule 21.08.2013
comment
Имейте в виду, что почти все решения, отличные от exiv2, здесь не смогут получить доступ к MakerNote. В этот тег EXIF ​​производители камер добавляют свои собственные теги, содержащие ценную информацию. Таким образом, вы получите только основные теги с большинством библиотек из приведенных ниже ответов.   -  person user136036    schedule 13.02.2020


Ответы (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. :)

person Paolo Bergantino    schedule 19.04.2009
comment
Ни одно из этих решений не может записывать теги EXIF ​​обратно, поэтому они не являются решением вопроса. - person odinho - Velmont; 04.01.2011
comment
Хотя технически это не позволяет писать теги EXIF, я нашел это очень полезным. +1 за написание кода. - person Cerin; 11.05.2011
comment
Нет PIL для Python 3.x - person More Than Five; 08.07.2013
comment
Хороший обзор. Просто примечание: похоже, exif-py в настоящее время несовместим с Python 3.x (проверено с Python 3.3.3, см. также github.com/ianare/exif-py/issues/12). - person cel; 11.01.2014
comment
@MoreThanFive Существует вилка PIL, которая активно поддерживается и интегрируется с pip! github.com/python-pillow/Pillow - person ibizaman; 10.08.2014

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

person Community    schedule 19.04.2009
comment
Для справки: pyexiv2, кажется, лучше всех поддерживается и является наиболее полным (включая запись тегов EXIF ​​​​обратно в файл). - person rbp; 26.10.2010
comment
Можно ли легко установить pyexiv2 внутри virtualenv? - person Matt Austin; 16.05.2012
comment
Обслуживание кажется медленным, а установка на Mac — ад. :/ - person Vortexfive; 11.09.2012
comment
Для тех, кому не все равно: к сожалению, pyexiv2 доступен только для Python 2. - person texnic; 18.09.2012
comment
‹ЦИТАТА src=redmine.yorba.org/projects/gexiv2/wiki› Это будет одинаково хорошо работают как с Python 2, так и с Python 3, что делает GExiv2 отличной заменой pyexiv2, который поддерживает только Python 2. ‹/QUOTE› - person jno; 13.05.2013
comment
Можете ли вы проверить это на этом вопросе, загрузить изображения и попытаться получить описание изображения. stackoverflow.com/ вопросы/22173902/ - person A.J.; 06.03.2014
comment
Могу ли я получить доступ к отметкам времени моего изображения с помощью pyexiv? - person praxmon; 14.03.2014

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

person dlm    schedule 11.05.2011
comment
обновил это на основе последней информации о привязках к exiv2 - person dlm; 07.06.2013
comment
pyexiv2 был разветвлен: py3exiv2.tuxfamily.org. - person Artem Klevtsov; 19.03.2016
comment
ссылка наilloy.net не работает - person jtlz2; 11.03.2020

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

person Jason R. Coombs    schedule 15.11.2009
comment
Не уверен, что это можно считать меньшим преимуществом. - person Mad Physicist; 05.01.2018

Используйте ПИЛ :)

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')
person Max    schedule 13.04.2012
comment
Pure PIL/Pillow не позволяет изменять теги EXIF. Но в этом помогает небольшая библиотека: github.com/hMatoba/Pyxif - person Simon Steinberger; 27.01.2015

Страница по адресу http://redmine.yorba.org/projects/gexiv2/wiki. (стало https://wiki.gnome.org/Projects/gexiv2) читается как сейчас:

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

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

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

person jno    schedule 13.05.2013
comment
Ссылка не работает. это работает wiki.gnome.org/Projects/gexiv2 - person user881300; 22.09.2016
comment
хорошее обновление! С 2013 года прошло 3 года... - person jno; 27.10.2016

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

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

person Community    schedule 23.07.2009
comment
Больше не существует. - person Simon Steinberger; 27.01.2015

каким-то образом я получаю 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
person otterb    schedule 26.06.2011

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

person Albert    schedule 23.01.2011
comment
Эй, это выглядит хорошо. Какие-нибудь острые края с ним? - person Rich; 18.10.2012
comment
@Rich: я уже не помню. Это сработало для меня. - person Albert; 18.10.2012

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

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

person Geert Dekkers    schedule 09.06.2012
comment
Существует оболочка Python для exiftool github.com/smarnach/pyexiftool. Один голос за exiftool за то, что он очень полный. - person Long Vu; 26.06.2012
comment
Он просит Python lib. - person Diego Woitasen; 10.07.2012

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

person Michał Niklas    schedule 23.07.2009

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

import Image    
from ExifTags import TAGS
person Tomasz Nazar    schedule 08.07.2010