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

Macos Exiftool在PNG图像中创建OSX可见XMP元数据,macos,exif,spotlight,xmp,exiftool,Macos,Exif,Spotlight,Xmp,Exiftool,在我的图像处理软件中,我使用exiftool成功地从Cr2、TIFF、JPG文件中调出exif信息。添加的标记,如“关键字”,都可以在OSX(mountain lion)Finder、Preview中看到,并通过Spotlight很好地索引 对于PNG,我需要回退到XMP,因为这是PNG的元数据容器。然而,exiftool添加的标签似乎既不会被预览也不会被聚光灯所关注。相反,如果我首先在预览中添加一个标记,然后使用exiftool添加一个新标记,则会对其进行索引。我在XMP原始数据中看到的区别是

在我的图像处理软件中,我使用exiftool成功地从Cr2、TIFF、JPG文件中调出exif信息。添加的标记,如“关键字”,都可以在OSX(mountain lion)Finder、Preview中看到,并通过Spotlight很好地索引

对于PNG,我需要回退到XMP,因为这是PNG的元数据容器。然而,exiftool添加的标签似乎既不会被预览也不会被聚光灯所关注。相反,如果我首先在预览中添加一个标记,然后使用exiftool添加一个新标记,则会对其进行索引。我在XMP原始数据中看到的区别是,exiftool新创建了一个头,而Preview没有

例如,请查看维基百科页面上的以下PNG(不含元数据):

使用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'?>
令人惊讶的是,如果我首先使用Preview创建一个标记,然后执行上面的命令,那么新的标记会被反映出来。我怀疑我正在监督一个需要“激活”的外部数据解析器,提取标记并将它们放在不同的存储中(例如,DS_存储)。我没有看到任何xattr被添加

以下是我的问题:

  • exiftool是XMP/PNG组合的正确工具吗?我是否缺少一个特定的功能
  • OSX是否违反XMP标准?编辑:OSX默认不遵守编辑
  • 我是否应该使用其他工具来剥离容器

我在磁盘上找到了我的xmp_sdk,并使用提供的示例进行了实验:

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

ReadingXMP可以将ExifTool插入的XMP信息读取到PNG中,尽管OSX Finder中没有显示该信息

当查看ModifyXMP的输出和exiftool插入完全相同的XMP blob时,文件大小类似。一个diff显示exiftool附加在文件末尾,xmpsdk将其放在PNG的头中。声明“鼓励编码器将块放在文件的开头,但这不是必需的。”

结论:exiftool编写XMP的方式存在(轻微)差异,这特别会干扰OSXs元数据检索

目前:

  • 改为使用XMPSDK,在开始时插入一个干净的XMP数据包,并让exiftool重用第一个数据块
  • 我和作者菲尔·哈维回答说:

    我用Apple Preview做了一些游戏,它不仅不能识别文件末尾的XMP,而且在向图像添加关键字时会删除这个XMP。我的猜测是,如果XMP位于IDAT块之后,苹果软件就会忽略它。如果XMP规范要求XMP块在IDAT之前出现,那就太好了,但事实并非如此,因此这一定是苹果软件中的一个缺陷。我已经将此添加到了

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

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

  • 向苹果公司提交了一个bug——2014年12月更新:苹果公司关闭了我的bug,声明他们不会就此问题采取任何行动

  • 您可以尝试XMP Toolkit SDK及其示例,并为PNG编写元数据
  • OSX使用IPTC(不确定,请在别处阅读),XMP toolkit确实协调了XMP和IPTC,因此使用XMP toolkit添加的关键字可以在OSX上搜索

  • 从您的观察来看,
    exiftool
    似乎无法协调IPTC和XMP。您可以尝试在PNG中同时更改IPTC和XMP,看看它是否可搜索。

    预览。app现在可以正常使用

    exiftool -xmp-dc:subject=ViaExifSubject 
    

    我编辑了这篇文章以包含XMPSDK行为。我认为这里不需要IPTC(在PNG中不直接支持)。我将为您提供使用XMP SDK路线的积分,该路线触发了在PNG中查找XMP数据包顺序的过程——我们将看到结果
    exiftool "-xmp<=viaexif.xmp" PNG_transparency_demonstration_1.png
    
    exiftool -xmp-dc:subject=ViaExifSubject