圍繞我的圖像處理軟件,我使用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:
添加關鍵字使用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月:蘋果封閉我的錯誤,指出他們不會採取任何行動對這個話題
我編輯帖子以包含XMP sdk行爲。我不認爲這裏需要IPTC(不直接支持PNG)。 – gdh
我會給你帶來XMP SDK路由的信用,這個路由觸發了PNG中XMP數據包順序的發現 - 我們將看到這裏的結果 – gdh