gpt4 book ai didi

c# - 将自定义命名空间添加到元数据 (BitmapMetadata)

转载 作者:行者123 更新时间:2023-11-30 12:30:37 24 4
gpt4 key购买 nike

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

假设我希望 namespace 如下所示: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 View :

<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
  • 使用第三方库修改元数据

关于c# - 将自定义命名空间添加到元数据 (BitmapMetadata),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com