以下是一个简单的问题:如何使用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
甚至可以做到这一点?
答案 0 :(得分:2)
使用BitmapMetadata
获得的最佳效果:
<rdf:Description xmlns:prefix0="http://test">...</rdf:Description>
以下是元数据查询:
metadata.SetQuery("/xmp/{wstr=http://test}:MyTag", "AwesomeTagValue");
根据文件:
如果特定模式没有友好模式前缀,则为 示例,如果图像包含使用自定义第三方的XMP元数据 架构时,元数据查询应该使用完整的架构URL。
因此,如果您对结果不满意,可以:
prefix0
替换为MyNamespace