将自定义命名空间添加到元数据(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视图:
...
所以所有的标签都以prefix0
为前缀,我希望它是
...
任何想法如何做到这一点,或甚至可能使用BitmapMetadata
?
使用BitmapMetadata
可以实现的最佳BitmapMetadata
:
...
这是元数据查询:
metadata.SetQuery("/xmp/{wstr=http://test}:MyTag", "AwesomeTagValue");
根据文件:
如果特定架构没有友好架构前缀,例如,如果图像包含使用自定义第三方架构的XMP元数据,则元数据查询应使用完整架构URL。
因此,如果您对结果不满意,您可以:
- 打开图像文件并将所有
prefix0
替换为MyNamespace
- 使用第三方库修改元数据