XMP теги изображений и Python - PullRequest
3 голосов
/ 01 февраля 2009

Если бы я пометил кучу изображений через XMP, в Python, что было бы лучшим способом? Я использовал Perl Image :: ExifTool , и я очень привык к его надежности. Я имею в виду, что эта штука никогда не была заложена десятками тысяч изображений.

Я обнаружил это , при поддержке некоторых тяжеловесов, таких как Европейское космическое агентство, но он явно помечен как нестабильный.

Теперь, предположив, что я знаком с C ++, насколько легко, скажем, использовать Adobe XMP toolkit напрямую в Python? Никогда раньше этого не делал, я не уверен, на что я подпишусь.

Обновление: Я попробовал некоторые библиотеки там, и, включая вышеупомянутый инструментарий, они все еще довольно незрелые и имеют серьезные проблемы. Я прибег к написанию на основе Perl-сервера, который принимает XML-запросы на чтение и запись метаданных, с проверенной в бою Image :: EXIF. Объем кода на самом деле очень мал, и определенно лучше, чем пытать себя, пытаясь заставить работать библиотеки Python. Серверное решение не зависит от языка, поэтому это два.

Ответы [ 4 ]

4 голосов
/ 13 сентября 2010

Я несколько часов боролся с python-xmp-toolkit, и в конце концов сдался и просто обернул вызовы ExifTool .

Существует библиотека Ruby , которая также включает ExifTool (хотя и намного лучше, чем то, что я создал); Я чувствую, что стоило бы перенести его на Python для простого способа работы с XMP.

4 голосов
/ 01 февраля 2009

Ну, на их веб-сайте написано, что python-xmp-toolkit использует Exempi, основанный на наборе Adobe XMP, через ctypes. То, что я пытаюсь сказать, это то, что вы вряд ли создадите лучшую оболочку кода C ++ самостоятельно. Если он нестабилен (то есть глючит), вам, скорее всего, все еще дешевле создавать патчи, чем делать это самостоятельно с нуля.

Однако в вашей особой ситуации это зависит от того, сколько вам нужно. Если вам нужна только одна функция, то возможно выполнить код C ++ в небольшую библиотеку расширений C или с помощью Cython. Когда вам нужны все функциональные возможности и гибкость, вам нужно создавать оболочки вручную или с помощью SWIG, в основном повторяя работу, уже проделанную другими людьми.

1 голос
/ 05 августа 2017

Для Python 3.x есть py3exiv2 , который поддерживает редактирование метаданных XMP

С py3exiv2 вы можете читать и записывать все стандартные метаданные, создавать свое собственное пространство имен XMP или извлекать миниатюру, встроенную в файл изображения.

Одна вещь, которая мне нравится в py3exiv2, это то, что она построена на (C ++) exiv2 библиотеке , которая выглядит хорошо поддерживаемой

Я действительно столкнулся с проблемой при установке его в моей системе (Ubuntu 16.04). Чтобы заставить его работать, мне сначала нужно было установить последнюю версию libexiv2-dev (sudo apt-get install libexiv2-dev), и только после этого установить py3exiv2 (sudo -H pip3 install py3exiv2)

Вот как я использовал py3exiv2 для написания нового тега:

import pyexiv2
metadata = pyexiv2.ImageMetadata("file_name.jpg")
metadata.read()
key = "Xmp.xmp.CustomTagKey"
value = "CustomTagValue"
metadata[key] = pyexiv2.XmpTag(key, value)
metadata.write()

(в документации также есть )

0 голосов
/ 04 февраля 2009

Вы можете использовать ImageMagic convert , IIRC также имеет модуль Python.

...