2010-01-19 78 views
2

我正在編寫一個開源庫來提取圖像元數據,並將其作爲XMP序列化存儲在XML邊框中(理想情況下與Adobe應用程序序列化其元數據的方式相同)。如何將BitmapMetadata鍵轉換爲相應的XMP名稱?

我的問題是,似乎BitmapMetadata具有我需要的所有值,但鍵被損壞。它們中的很多隻是整數,而不是它們對應的XMP命名空間XML風格的名稱。微軟 聲稱他們使用XMP來存儲 在介質中讀取/寫入許多不同格式的元數據,但我沒有看到任何方式從這些元數據重建一些標準XMP名稱。

例如,姓名= "/{ushort=272}",格式= "ifd"是我有,但我需要的是<tiff:Model>其中xmlns:tiff="http://ns.adobe.com/tiff/1.0/"。爲此,我可以使用我的ExifUtils library中的ExifTags來映射某些鍵,因爲我知道它是什麼。但我不確定其他許多人。

我的問題:

  1. 任何人只要有足夠的BitmapMetadata熟悉,知道如果我領導下一條死衚衕?

  2. 是否存在Microsoft正在編碼的標準化映射?我還沒有在Adobe's official XMP specs中找到一個。


更新:此庫的開放式源代碼現已在谷歌代碼爲XmpUtils library。它支持讀/寫XMP元數據作爲標準的基於RDF的XML。

回答

1

事實證明,通過BitmapMetadata使用的Windows Imaging Component (WIC)讀取/寫入許多不同類型的元數據塊,包括TIFF,EXIF,IPTC, XMP。這就解釋了爲什麼不幸的是,它們的對象模型與XMP序列化模型並不完全一致;這是非常普遍的。

我正在尋找的關鍵映射取決於哪一部分正在解碼,甚至在XMP的情況下,它也不完全是一個乾淨的轉換。另一個答案中的MSDN鏈接給出了元數據查詢語言的詳細描述,元數據查詢語言是WIC用來引用媒體內的元數據部分的類XPath語法。這對於將每個路徑段解析爲一個可用於確定相應XMP名稱空間和屬性名稱的密鑰非常有用。

正如我在問題中提到的,我現在已經構建了這個庫,它可以正確地從TIFF,EXIF和XMP塊中轉換很高比例的元數據屬性。

請參閱the XmpUtils library源代碼,以查看我如何以標準方式提取此數據的詳細信息。

2

我似乎偶然發現了page 18 in Part 3 of the XMP spec上的關鍵映射。它看起來像BitmapMetadata被簡單地暴露所述JPEG編碼XMP數據部分:

的標記類型FFE0-FFEF是 通常用於應用數據, 命名APPN。按照慣例,APPn 標記以標識用法的字符串 開頭,稱爲 名稱空間或簽名字符串。標記識別Exif和TIFF 元數據; APP13標記指定 Photoshop圖像資源(PSIR) 包含IPTC元數據;另一個標記指定了XMP分組的位置。

不知道確定列表來自哪裏,因爲這看起來不完整。


更新:

我只是偶然發現了an MSDN set of pages ("Photo Metadata Policy")可鏈接到微軟的元數據查詢語言路徑相當全面的列表(上左),因爲他們支持的每個屬性。這是一個絕對可怕的格式,每頁只有一個路徑,但它似乎是我需要的大量數據。不幸的是,它看起來像JPEG和TIFF有不同的路徑...


更新:

而且當前頁是關鍵的,因爲它定義了瘋狂這是本類XPath語法:Metadata Query Language Overview