为元数据添加自定义命名空间(BitmapMetadata)

本文关键字:BitmapMetadata 命名空间 自定义 元数据 添加 | 更新日期: 2023-09-27 18:06:52

这里有一个快速问题:如何使用BitmapMetadata正确地向XMP添加自定义名称空间?

假设我想让命名空间看起来像这样: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 ?

为元数据添加自定义命名空间(BitmapMetadata)

使用BitmapMetadata的最佳效果:

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

元数据查询:

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

根据文档:

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

如果你对结果不满意,你可以:

  • 打开图像文件,将所有prefix0替换为MyNamespace
  • 使用第三方库修改元数据