Прочитать данные XMP изображения в Python - PullRequest
16 голосов
/ 26 июля 2011

Могу ли я использовать PIL, как в этом примере ?

Мне нужно только прочитать данные, и я ищу самый простой и простой способсделать это (я не могу установить pyexiv ) .

edit: Я не хочу верить, что единственный способ сделатьэто с некоторой библиотекой ( python-xmp-toolkit , pyexiv2 , ...), которая нуждается в Exempi и Boost.Должен быть другой вариант!

Ответы [ 5 ]

11 голосов
/ 14 ноября 2011

Ну, я искал что-то похожее, затем я наткнулся на PHP-эквивалент вопрос и перевел ответ на Python:

f = 'example.jpg'
fd = open(f)
d= fd.read()
xmp_start = d.find('<x:xmpmeta')
xmp_end = d.find('</x:xmpmeta')
xmp_str = d[xmp_start:xmp_end+12]
print(xmp_str)

затем вы можете конвертировать xmp_str и анализироватьэто с XML API.

7 голосов
/ 14 августа 2015

Метаданные XMP можно найти в applist.

from PIL import Image
with Image.open(filename) as im:
    for segment, content in im.applist:
        marker, body = content.split('\x00', 1)
        if segment == 'APP1' and marker == 'http://ns.adobe.com/xap/1.0/':
            # parse the XML string with any method you like
            print body
3 голосов
/ 26 июля 2011

Мне также интересно знать, есть ли «правильный» простой способ сделать это.

Тем временем я реализовал чтение пакетов XMP с использованием чистого Python в PyAVM Соответствующий код здесь . Может быть это тебе пригодится?

2 голосов
/ 01 февраля 2013
with open( imgFileName, "rb") as fin:
    img = fin.read()
imgAsString=str(img)
xmp_start = imgAsString.find('<x:xmpmeta')
xmp_end = imgAsString.find('</x:xmpmeta')
if xmp_start != xmp_end:
    xmpString = imgAsString[xmp_start:xmp_end+12]

xmpAsXML = BeautifulSoup( xmpString )
print(xmpAsXML.prettify())

Или вы можете использовать Python XMP Toolkit

1 голос
/ 27 июля 2011

Поиск в источнике PIL (1.1.7) говорит мне, что он может распознавать информацию XMP в файлах Tiff, но я не могу найти никаких свидетельств документированного или недокументированного API для работы с информацией XMP с использованием PIL на уровне приложения.

Из файла ИЗМЕНЕНИЙ, включенного в источник:

+ Support for preserving ICC profiles (by Florian Böch via Tim Hatch).

  Florian writes:

  It's a beta, so still needs some testing, but should allow you to:
  - retain embedded ICC profiles when saving from/to JPEG, PNG, TIFF.
     Existing code doesn't need to be changed.
  - access embedded profiles in JPEG, PNG, PSD, TIFF.

  It also includes patches for TIFF to retain IPTC, Photoshop and XMP
  metadata when saving as TIFF again, read/write TIFF resolution
  information correctly, and to correct inverted CMYK JPEG files.

Таким образом, поддержка XMP ограничена TIFF и позволяет сохранять информацию XMP только тогда, когда изображение TIFF загружено, возможно изменено и сохранено. Приложение не может получить доступ или создать данные XMP.

...