我正在编写一个开源库来提取图像元数据并将其作为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来映射一些键,因为我知道它是什么。我不确定其他许多人。
我的问题:
任何熟悉BitmapMetadata的人都知道我是不是走向了死胡同?
Microsoft正在编码的标准化映射是什么?我还没有在Adobe's official XMP specs找到一个。
更新:此库的开源代码现已在Google代码中以XmpUtils library的形式提供。它支持读取/写入XMP元数据作为标准的基于RDF的XML。
答案 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源代码,了解我最终如何以标准化方式提取此数据。