Exiftool для создания OSX видимых метаданных XMP в PNG-изображениях

вокруг моего программного обеспечения для обработки изображений я использую exiftool, чтобы успешно перетасовать информацию exif из файлов Cr2, TIFF, JPG. Добавленные теги, такие как "ключевые слова", видны в OSX (mountain lion) Finder, Preview и хорошо индексируются Spotlight.

для PNGs мне нужно вернуться к XMP, так как это контейнер метаданных для PNG. Однако добавленные теги exiftool, похоже, не подхватываются ни Preview, ни SpotLight. Напротив, если я сначала добавлю тег в Preview и использую exiftool, чтобы добавить новый тег позже, это индексируется. Разница здесь я вижу здесь в необработанных данных XMP, где exiftool недавно создает заголовок, а Preview нет.

в качестве примера посмотрите на следующий PNG со страницы Википедии на PNG без метаданных https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png:

Sample PNG without metadata

добавление ключевого слова с помощью exiftool, а затем сброс XMP блок:

exiftool -xmp-dc:subject=ViaExifSubject ./PNG_transparency_demonstration_1.png
exiftool -xmp -b ./PNG_transparency_demonstration_1.png

дает следующие данные XMP:

<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.02'>
    <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
 <rdf:Description rdf:about=''
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
  <dc:subject>
   <rdf:Bag>
    <rdf:li>ViaExifSubject</rdf:li>
   </rdf:Bag>
  </dc:subject>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>

однако в панели предварительного просмотра или Finder info "ViaExifSubject" не найден.

альтернативно, используя OSX Preview для добавления комментариев (открыть в Preview, показать инспектор, перейдите на вкладку Keywords, нажмите"+", чтобы добавить ключевое слово). XMP снова сбрасывается через exiftool:

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.1.2">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:subject>
            <rdf:Bag>
               <rdf:li>viaPreview</rdf:li>
            </rdf:Bag>
         </dc:subject>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>

на xpacket заголовок отсутствует в ключевом слове Preview generated, а набор инструментов XMP отличается. В "viaPreview" тег сейчас, например, с помощью mdls на CLI.

нажатие raw XMP info в очистить файл также не дает ожидаемого результата:

exiftool "-xmp<=viaexif.xmp" PNG_transparency_demonstration_1.png

Удивительно, но если я сначала создам тег с помощью Preview, а затем сделаю команду выше, новые теги будут отражены я подозреваю, что я контролирую внешний анализатор данных, который должен быть "активирован", подбирает теги и помещает их в другой магазин (например .DS_store). Я не видел ни xattr добавляется.

вот мои вопросы:

  • является exiftool правильным инструментом для комбинации XMP / PNG, и мне не хватает определенной функции
  • OSX бросает вызов стандарту XMP? Edit: видимо XMP не соблюдается OSX по умолчанию
  • должен ли я исследовать альтернативный инструмент для очистки контейнера ?

я выкопал свой xmp_sdk на своем диске и экспериментировал с предоставленным образцы:

ModifyXMP может записывать "чистую" информацию XMP в PNG, которая показана в OSX Finder - это хорошая цель.

ReadingXMP может считывать информацию XMP, вставленную ExifTool в PNG, хотя эта информация не отображается в OSX Finder.

размер файла аналогичен при просмотре вывода ModifyXMP и ExifTool, вставляющего точно такой же XMP blob. Разница показывает, что exiftool добавляет в конце файла, где XMP sdk помещает его в заголовок PNG. The XMP spec утверждает, что "кодеры могут поместить блок в начале файла, но это не требуется."

вывод: существует (небольшая) разница в том, как exiftool пишет XMP, и это особенно мешает поиску метаданных OSXs.

сейчас:

  • экспериментируйте с XMP SDK вместо того, чтобы вставлять чистый пакет XMP в начале, и exiftool повторно использует этот первый кусок.
  • I перепостил на форуме exiftools, а автор Фил Харви ответил:

    Я немного играл с Apple Preview, и он не только не распознает XMP в конце файла, но и удаляет этот XMP при добавлении ключевых слов к изображению. Я предполагаю, что программное обеспечение Apple игнорирует XMP, если оно приходит после куска IDAT. Было бы замечательно, если бы спецификация XMP требовала, чтобы кусок XMP пришел до IDAT, но это не так, поэтому это должно быть считается ошибкой в программном обеспечении Apple. Я добавил Это к список известных проблем.

    наконец, Фил Харви решил исправить эту проблему в самом Exiftool:

    я проделал большую работу над этим, и Exiftool 9.40 будет иметь новую опцию, чтобы позволить вам написать XMP перед PNG IDAT chunk. Соответствующая команда будет выглядеть следующим образом: exiftool -api PNGEarlyXMP ...

  • подал a ошибка в Apple -- Update dec 2014: Apple закрыла мою ошибку, заявив, что они не будут предпринимать никаких действий по этой теме

1 ответов


  1. попробуйте XMP Toolkit SDK и его образцы и напишите метаданные для PNG.
  2. OSX использует IPTC (не уверен, где-то читал), и XMP toolkit согласовывает XMP и IPTC, поэтому ключевое слово, добавленное с помощью XMP Toolkit, будет доступно для поиска в OS X.

из вашего наблюдения это выглядит как exiftool не согласовывает IPTC и XMP. Вы можете попробовать изменить IPTC и XMP внутри PNG и посмотреть, доступен ли он для поиска.