Exiftool在PNG图像中创建OSX可见XMP元数据

gdh*_*gdh 9 macos xmp exif spotlight exiftool

在我的图像处理软件周围,我使用exiftool成功地从Cr2,TIFF,JPG文件中删除exif信息.添加的标签,例如"关键字",在OSX(山狮)Finder,预览中都可见,并且被Spotlight很好地编入索引.

对于PNG,我需要回退到XMP,因为这是PNG的元数据容器.但是,预览和SpotLight似乎都没有选择使用exiftool的标签.相反,如果我首先在预览中添加标签并使用exiftool稍后添加新标签,则此IS已编入索引.我在这里看到的差异在XMP原始数据中,exiftool新创建了一个标题,而Preview没有.

例如,请查看PNG上维基百科页面中的以下PNG,无需元数据https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png:

示例PNG没有元数据

使用exiftool添加关键字,然后转储XMP数据块:

exiftool -xmp-dc:subject=ViaExifSubject ./PNG_transparency_demonstration_1.png
exiftool -xmp -b ./PNG_transparency_demonstration_1.png
Run Code Online (Sandbox Code Playgroud)

提供以下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'?>
Run Code Online (Sandbox Code Playgroud)

但是,在"预览"或"查找器"信息面板中,未找到"ViaExifSubject".

或者,使用OSX预览添加注释(在预览中打开,显示检查器,转到关键字选项卡,单击'+'添加关键字).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>
Run Code Online (Sandbox Code Playgroud)

xpacket报头中不存在预览生成的关键词,并且XMP工具包是不同的.现在可以看到"viaPreview"标签,例如mdls在CLI上使用.

将原始XMP信息推送到干净文件中也不会产生预期结果:

exiftool "-xmp<=viaexif.xmp" PNG_transparency_demonstration_1.png
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,如果我首先使用预览创建一个标签,那么执行上面的命令,反映新标签我怀疑我正在监督需要"激活"的外部数据解析器,拾取标签并将它们放在不同的位置商店(例如.DS_store).我还没有看到任何添加的xattr.

这些是我的问题:

  • exiftool是XMP/PNG组合的正确工具,我错过了一个特定的功能
  • OSX是否违反了XMP标准?编辑:显然,默认情况下OSX不会遵守XMP
  • 我应该用另一种工具来研究剥离容器吗?

我在我的磁盘上挖出了我的xmp_sdk并尝试了提供的示例:

ModifyXMP可以将"纯"XMP信息写入到OSG Finder中显示的PNG中 - 这是一个很好的目标.

ReadingXMP可以将ExifTool插入的XMP信息读入PNG,尽管此信息未在OSX Finder中显示.

查看ModifyXMP的输出和exiftool插入完全相同的XMP blob时,文件大小相似.差异显示exiftool附加在文件末尾,XMP sdk将其放在PNG的标题中.在XMP规范指出,"鼓励编码器放置在文件开头的块,但这不是必需的."

结论:exiftool如何编写XMP存在(轻微)差异,这尤其与OSXs元数据检索混淆.

目前:

  • 尝试使用XMP SDK代替在开头插入一个干净的XMP数据包,并让exiftool重用这个第一个数据块.
  • 转发到exiftools的论坛上,作者Phil Harvey回复道:

    我做了一些Apple Preview游戏,不仅在文件末尾不识别XMP,而且在向图像添加关键字时删除了这个XMP.我的猜测是,如果它出现在IDAT块之后,Apple软件会忽略XMP.如果XMP规范强制要求在IDAT之前使用XMP块,那将是非常好的,但它没有,所以这必须被认为是Apple软件中的一个错误.我已将此添加到已知问题列表中.

    最后,Phil Harvey决定在Exiftool中解决这个问题:

    我已经做了很多工作,Exiftool 9.40将有一个新的选项,允许你在PNG IDAT块之前编写XMP.相应的命令如下所示: exiftool -api PNGEarlyXMP...

  • 在Apple发布了一个错误 - 2014年12月更新:Apple关闭了我的错误,声称他们不会对此话题采取任何行动

小智 0

  1. 您尝试 XMP Toolkit SDK 及其示例并为 PNG 编写元数据。
  2. OSX 使用 IPTC(不确定,在某处读到)并且 XMP 工具包确实协调了 XMP 和 IPTC,因此使用 XMP Toolkit 添加的关键字将在 OS X 上可搜索。

根据您的观察,exiftoolIPTC 和 XMP 似乎并不协调。您可以尝试的是尝试更改 PNG 内的 IPTC 和 XMP 并查看它是否可搜索。