2013-10-03 116 views
8

圍繞我的圖像處理軟件,我使用exiftool成功地將Cr2,TIFF,JPG文件的exif信息進行混洗。添加的標籤,如「關鍵字」,都可以在OSX(山獅)Finder,Preview中看到,並且由Spotlight進行了很好的索引。Exiftool在PNG圖像中創建OSX可見的XMP元數據

對於PNG我需要回退到XMP,因爲這是PNG的元數據容器。但是,Exiftool添加的標籤似乎不會被預覽和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信息面板中,找不到「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信息爲乾淨文件還沒有給出預期的結果:

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

出人意料的是,如果我使用預覽首先創建一個標籤,然後執行上面的命令,新標籤被反射我懷疑我正在監督需要「激活」的外部數據分析器,拿起標籤並將它們放在不同的商店(例如.DS_store)中。我沒有看到任何xattr被添加。

這是我的問題:

  • 是exiftool爲XMP/PNG組合正確的工具,而我失去了一個特定的功能
  • 是OSX不畏一個XMP標準?編輯:apparently XMP默認情況下不受OSX的約束
  • 我應該調查替代工具以去除容器嗎?

我挖了我的xmp_sdk我的硬盤上,並與所提供的樣品進行實驗:

ModifyXMP可以寫「純粹」的XMP信息爲PNG這是在OSX Finder中顯示 - 這是一個很好的目標。

雖然此信息未在OSX Finder中顯示,但ReadingXMP可以將ExifTool插入的XMP信息讀入PNG。

查看ModifyXMP的輸出和exiftool插入完全相同的XMP blob時,文件大小相似。 diff顯示Exiftool附加在XMP sdk放入PNG頭文件的末尾。 XMP spec指出「鼓勵編碼器將塊放在文件的開頭,但這不是必需的。」

結論:exiftool寫入XMP的方式有一點(略有不同),這與OSX元數據檢索特別混淆。

現在:

  • 嘗試使用XMP SDK,而不是插入開頭乾淨的XMP包,並有exiftool重用這個第一個塊。
  • reposted on exiftools' forum和作者菲爾·哈維說:

    我做了一些與蘋果預覽玩耍,它不僅不是在文件的結尾認識XMP,而且它加入時刪除該XMP關鍵字到圖像。我的猜測是,如果蘋果軟件在IDAT組件之後出現,它會忽略XMP。如果XMP規範要求XMP塊來到IDAT之前,但它不會,所以這應該是美好的,所以這必須被認爲是Apple軟件中的一個錯誤。我已將此添加到list of Known problems

    最後,菲爾·哈維決定Exiftool本身來解決這個問題:

    我已經做了很多這方面的工作,並Exiftool 9.40將有一個新的選擇,讓你寫XMP在PNG IDAT塊之前。相應的命令看起來就像這樣: exiftool -api PNGEarlyXMP ...

  • 在蘋果提起的錯誤 - 更新2014年12月:蘋果封閉我的錯誤,指出他們不會採取任何行動對這個話題

回答

0
  1. 您可以嘗試XMP Toolkit SDK及其樣本併爲PNG寫入元數據。
  2. OSX使用IPTC(不確定,讀的地方)和XMP工具包做得調和XMP和IPTC,XMP使用工具包將在OS X

從你的觀察,它看起來像exiftool沒有按搜索,因此添加關鍵字不協調IPTC和XMP。你可以嘗試的是嘗試改變PNG內部的IPTC和XMP,並查看它是否可搜索。

+0

我編輯帖子以包含XMP sdk行爲。我不認爲這裏需要IPTC(不直接支持PNG)。 – gdh

+0

我會給你帶來XMP SDK路由的信用,這個路由觸發了PNG中XMP數據包順序的發現 - 我們將看到這裏的結果 – gdh