Схватить описание / ключевые слова с картинки Tiff?
У меня есть несколько файлов TIFF, которые содержат описания и "ключевые слова" (как их называет OS X в инспекторе файлов). Однако у меня возникают трудности при сборе этих метаданных из изображений.
Я попытался использовать tifffile.py, команды exif PIL и IPTCInfo, и хотя tifffile.py получит описание, я все еще не могу разобрать "ключевые слова" из файла, используя любую из этих библиотек.
Хранятся ли ключевые слова с использованием "спецификации" для TIFF, отличной от JPEG? Каков наилучший подход для разбора этих ключевых слов?
РЕДАКТИРОВАТЬ
В дополнение к комментарию от abarnert
Я открыл один из файлов TIFF в текстовом редакторе и обнаружил, что есть данные XML, которые содержат "ключевые слова". Фрагмент ниже:
...
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">OLYMPUS DIGITAL CAMERA</rdf:li>
</rdf:Alt>
</dc:description>
<dc:format>image/tiff</dc:format>
<dc:subject>
<rdf:Bag>
<rdf:li>Foo</rdf:li>
<rdf:li>Bar</rdf:li>
<rdf:li>A long keyword</rdf:li>
</rdf:Bag>
</dc:subject>
</rdf:Description>
...
Похоже, что это может быть сохранено как двоичное представление; В tifffile.py перечислено несколько тегов, которые по сути являются кортежами целых чисел. Однако я не уверен, как это преобразовать. Предложения?
1 ответ
Хранятся ли ключевые слова с использованием "спецификации" для TIFF, отличной от JPEG?
Смотря как.
Контейнер TIFF имеет только очень ограниченный набор тегов метаданных и не имеет никакого способа указать произвольные ключевые слова.
JPEG вообще не является контейнерным типом; это кодек сжатия изображений, который можно использовать в различных контейнерах, включая TIFF. Но обычно, когда вы говорите "файл JPEG", вы имеете в виду JFIF, один из форматов контейнеров, указанных группой JPEG, и, подобно TIFF, JFIF имеет очень ограниченный набор тегов метаданных.
Exif - это другой контейнерный формат, идентичный TIFF в том, что касается структуры, но он определяет новые теги, специально для метаданных, что означает, что вы можете тривиально обернуть TIFF как Exif, и это все еще допустимый TIFF, и с небольшой хитростью вы можете также оберните JFIF как Exif таким образом, что это не совсем законный JFIF, но почти все программное обеспечение принимает его в любом случае.
Exif является единственным распространенным способом добавления метаданных в JFIF (не считая DCF, что в основном то же самое, что Exif), но это один из нескольких различных способов добавления метаданных в TIFF. IPTC является еще одним, как XMP, OME и, вероятно, многие другие.
Итак, некоторые файлы TIFF хранят "ключевые слова", используя ту же спецификацию, что и JFIF-wrapped-in-Exif, но другие этого не делают.
Каков наилучший подход для разбора этих ключевых слов?
Ну, вам нужно знать, в каком формате они хранятся.
Излишне говорить, что команды exif в PIL поддерживают только Exif, IPTCInfo поддерживает только IPTC, а tifffile в основном поддерживает… ну, разные вещи.
Я полагаю, что tifffile.py может хранить неизвестные типы тегов - это необработанные двоичные данные, которые вы можете перебрать и посмотреть, что вам не хватает. Это по крайней мере охватит все расширения, которые используют структуру контейнера TIFF. Если вы не найдете ключевых слов там, то... по крайней мере, это исключает многие распространенные форматы.
В любом случае, когда вы знаете, какой формат вы ищете, вы можете найти библиотеку, которая сможет с этим справиться. (Или, если он один из основанных на XML, просто прочитайте тег как двоичные данные с помощью tifffile, а затем проанализируйте его как UTF-8 XML, что, вероятно, проще, чем найти другую библиотеку.)