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


108

Я шукаю гарну бібліотеку маніпуляцій exif (Формат змінного файлу зображень) для python. Я віддаю перевагу гнучкість (наприклад, можливість витягувати власні теги постачальників), ніж швидкість обробки. Що б ти запропонував?


Можливо, питання повинно звучати так: "Які варіанти доступні для редагування Exif (формат файлу зображуваного зображення) за допомогою python, який підкреслює набір функцій (наприклад, можливість вивірити власні теги постачальників та сумісність із великою різноманітністю форматів зображень) за швидкість?"
dlm

1
@Wooble та ін: "Якщо це питання можна переробити на відповідність правилам у довідковому центрі, відредагуйте це питання або залиште коментар." Я зробив останнє, але Q закрився без додаткових коментарів. Що дає? (Просто намагаюся зрозуміти, і не хочу марнувати час на коментування / редагування питань, якщо його заздалегідь було зроблено)
dlm

Я хотів думок інших розробників, коли задавали це питання! ПакетOpinionOverflow?
Дерек Літц

1
Майте на увазі, що майже всі рішення, які не існують exiv2, тут не зможуть отримати доступ MakerNote. У цей тег EXIF ​​виробники камер додають власні теги, що містять цінну інформацію. Отже, ви отримаєте лише основні теги для більшості бібліотек з наведених нижче відповідей.
користувач136036

Відповіді:


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. :)


19
Жодне з цих «рішень» не може написати теги EXIF ​​назад, тому вони не є вирішенням питання.
odinho - Велмонт

22
Хоча технічно не дозволяє писати теги EXIF, я вважаю це дуже корисним. +1 для написання коду.
Серін

3
Немає PIL для Python 3.x
Більше ніж п’ять

Приємний огляд. Лише зауваження: exif-py наразі не сумісний з Python 3.x, як здається (тестовано з Python 3.3.3, див. Також github.com/ianare/exif-py/isissue/12 ).
віч

3
@MoreThanFive Є вилка PIL, яка підтримується з великим рівнем обслуговування і яка інтегрується з pip! github.com/python-pillow/Pillow
ibizaman

59

Я нещодавно використовую pyexiv2 , і, здається, досить добре відповідає моїм потребам. Можливо, це може підійти і вашому.


9
Для запису: pyexiv2, здається, найкраще підтримується з усіх, і найповніший (включаючи запис тегів EXIF ​​назад у файл).
rbp

1
Чи можна pyexiv2 легко встановити всередині virtualenv?
Метт Остін

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 для gexiv2 тут: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 і прив'язки - це все з відкритим кодом (GPL).


оновлено це на основі останньої інформації про прив’язки до exiv2
dlm

pyexiv2було роздвоєне: py3exiv2.tuxfamily.org .
Артем Клевцов

tilloy.net посилання мертвий
jtlz2

5

У цій статті описаний модуль Python для запису метаданих EXIF ​​(а не лише їх читання) за допомогою чистого Python. Мабуть, жоден з PIL, pyexif або EXIF-py не підтримує написання EXIF. pyexiv2, схоже, є кров'янистими та платформовими.


Не впевнений, чи можна це вважати краєм, що менше кровоточить.
Божевільний фізик

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
Чиста PIL / Подушка не дозволяє змінювати теги 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.

Гарні новини.


2
посилання не працює. це працює wiki.gnome.org/Projects/gexiv2
user881300

гарне оновлення! З 2013 року минуло 3 роки ...
jno

3

Ви також можете переглянути бібліотеку jpeg.py Gheorghe Milas за адресою http://www.emilas.com/jpeg/ , яка є "Бібліотекою пітонів для розбору, читання та запису метаданих 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

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

Недолік звичайно в тому, що це не python, тому вам потрібно буде використовувати дзвінки підпроцесу, як і я.


Існує пітон-обгортка для exiftool github.com/smarnach/pyexiftool . Один голос за exiftool за те, що він дуже повний.
Лонг Ву

Він просить битву Python.
Дієго Войтасен


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.