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

时间:2013-10-03 08:41:18

标签: macos exif spotlight xmp exiftool

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

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

例如,请查看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'?>

但是,在“预览”或“查找器”信息面板中,未找到“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>

预览生成关键字中不存在xpacket标头,XMP工具包不同。 “viaPreview”标签现在可见,例如在CLI上使用mdls

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

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

令人惊讶的是,如果我首先使用Preview创建一个标签,然后执行上面的命令,那么新的标签就会被反映出来我怀疑我正在监督需要“激活”的外部数据解析器,拿起标签并将它们放在不同的商店(例如.DS_store)。我还没有看到任何添加的xattr。

这是我的问题:

  • exiftool是XMP / PNG组合的合适工具,我是否缺少特定功能
  • OSX是否违反XMP标准?编辑:默认情况下OSX不会尊重apparently XMP
  • 我应该在另一种工具中调查剥离容器吗?

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

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

ReadingXMP可以将ExifTool插入的XMP信息读入PNG,但OSX Finder中未显示此信息。

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

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

目前:

  • 尝试使用XMP SDK,而不是在开头插入一个干净的XMP数据包,并让exiftool重用这个第一个数据块。
  • reposted on exiftools' forum,作者Phil Harvey回复道:

      

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

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

      

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

  • 提起Apple的一个错误 - 2014年12月更新:Apple关闭了我的错误,声明他们不会对此主题采取任何行动

2 个答案:

答案 0 :(得分:0)

  1. 您尝试使用XMP Toolkit SDK及其示例并为PNG编写元数据。
  2. OSX使用IPTC(不确定,在某处读取),XMP工具包会协调XMP和IPTC,因此使用XMP Toolkit添加的关键字将在OS X上搜索。
  3. 根据您的观察,exiftool似乎无法协调IPTC和XMP。您可以尝试尝试在PNG中更改IPTC和XMP,看看它是否可搜索。

答案 1 :(得分:0)

Preview.app 现在可以与

一起使用
exiftool -xmp-dc:subject=ViaExifSubject