c# – 向元数据添加自定义命名空间(BitmapMetadata)

这是一个简单的问题:如何使用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可以实现的最佳效果:

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

这是元数据查询:

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

根据文件:

If there is no friendly schema prefix for a particular schema, for
example if an image contains XMP metadata using a custom third party
schema, the metadata query should use the full schema URL.

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

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

点赞