如何将BitmapMetadata键转换为相应的XMP名称?

时间:2010-01-19 16:55:52

标签: c# wpf adobe xmp

我正在编写一个开源库来提取图像元数据并将其作为XMP序列化存储在XML边车中(理想情况与Adobe应用程序序列化其元数据的方式相同)。

我的问题是看起来BitmapMetadata具有我需要的所有值,但是密钥被破坏了。其中许多只是整数,而不是相应的XMP命名空间XML样式名称。 Microsoft 声称他们正在使用XMP来存储 在媒体中读取/写入许多不同格式的元数据,但我没有看到任何方法从这些中重构某些标准XMP名称

例如,Name = "/{ushort=272}",Format = "ifd"就是我所拥有的,但我需要的是<tiff:Model> xmlns:tiff="http://ns.adobe.com/tiff/1.0/"。为此,我可以使用我ExifUtils library中的ExifTags来映射一些键,因为我知道它是什么。我不确定其他许多人。

我的问题:

  1. 任何熟悉BitmapMetadata的人都知道我是不是走向了死胡同?

  2. Microsoft正在编码的标准化映射是什么?我还没有在Adobe's official XMP specs找到一个。


  3. 更新:此库的开源代码现已在Google代码中以XmpUtils library的形式提供。它支持读取/写入XMP元数据作为标准的基于RDF的XML。

2 个答案:

答案 0 :(得分:2)

我似乎偶然发现page 18 in Part 3 of the XMP spec上的键映射。看起来BitmapMetadata只是暴露了JPEG编码的XMP数据部分:

  

标记类型FFE0-FFEF是   通常用于应用数据,   名为APPn。按照惯例,APPn   标记以字符串开头   识别用法,称为   命名空间或签名字符串一个APP1   标记识别Exif和TIFF   元数据; APP13标记指定a   Photoshop图像资源(PSIR)即   包含IPTC元数据;另一个APP1   标记指定的位置   XMP数据包。

不确定最终清单的来源,因为这似乎不完整。


<强>更新

我偶然发现an MSDN set of pages ("Photo Metadata Policy")链接到他们支持的每个属性的相当全面的Microsoft元数据查询语言路径列表(左侧)。这是一种绝对可怕的格式,每页有一个路径,但它似乎是我需要的大量数据。不幸的是,看起来JPEG和TIFF有不同的路径......


<强>更新

此页面也是关键,因为它定义了这种类似XPath语法的疯狂:Metadata Query Language Overview

答案 1 :(得分:1)

事实证明,BitmapMetadata使用的Windows Imaging Component (WIC)读取/写入许多不同类型的元数据块,包括TIFF,EXIF,IPTC, XMP。这解释了为什么不幸的是它们的对象模型与XMP序列化模型不完全对应;它是高度概括的。

我正在寻找的键映射取决于正在解码的部分,即使在XMP的情况下,它也不是一个干净的转换。另一个答案中的MSDN链接给出了元数据查询语言的详细描述,元数据查询语言是WIC用于引用媒体中元数据部分的类似XPath的语法。这对于将每个路径段解析为密钥非常有用,然后可以使用该密钥来确定相应的XMP名称空间和属性名称。

正如我在问题中所提到的,我现在已经构建了这个库,可以正确地转换来自TIFF,EXIF和XMP块的很大比例的元数据属性。

请参阅the XmpUtils library源代码,了解我最终如何以标准化方式提取此数据。