4

这是一个快速的问题:如何正确地将自定义命名空间添加到 XMP 使用BitmapMetadata

假设我希望命名空间看起来像这样:xmlns:MyNamespace="http://test"

没有明确的方法如何在 中添加命名空间BitmapMetadata,所以我尝试了这个:

//I retrieve the image frame (Frame[0]), then:
var metadata = (BitmapMetadata) frame.Metadata.Clone();

//Covering all bases
metadata.SetQuery("/app1/ifd/PaddingSchema:Padding", 4096);
metadata.SetQuery("/app1/ifd/exif/PaddingSchema:Padding", 4096);
metadata.SetQuery("/xmp/PaddingSchema:Padding", 4096);

现在是主要查询,我尝试采用“显而易见的方式”:

metadata.SetQuery("/xmp/MyNamespace:MyTag", "AwesomeTagValue");

果然,如果我保存图像,打开它并运行

var value = (string) metadata.GetQuery("/xmp/MyNamespace:MyTag");

它返回正确的值 - AwesomeTagValue。

但问题是,标签被写入名称空间格式错误的文件中。我查看了文件,这是剥离的 XML/RDF 视图:

<rdf:Description rdf:about="" xmlns:prefix0="MyNamespace"> ... </rdf:Description>

所以所有标签都带有前缀,prefix0我希望它是

<rdf:Description rdf:about="" xmlns:MyNamespace="http://test"> ... </rdf:Description>

任何想法如何做到这一点,或者甚至可以使用BitmapMetadata

4

1 回答 1

2

您可以通过以下方式实现的最佳效果BitmapMetadata

<rdf:Description xmlns:prefix0="http://test">...</rdf:Description>

这是元数据查询:

metadata.SetQuery("/xmp/{wstr=http://test}:MyTag", "AwesomeTagValue");

根据文档:

如果特定架构没有友好的架构前缀,例如,如果图像包含使用自定义第三方架构的 XMP 元数据,则元数据查询应使用完整架构 URL。

因此,如果您对结果不满意,您可以:

  • 打开图像文件并全部替换prefix0MyNamespace
  • 使用第三方库修改元数据
于 2013-04-07T11:41:28.560 回答