使用c#中的元数据提取器获取自定义XMP元数据

本文关键字:元数据 获取 自定义 XMP 提取 使用 | 更新日期: 2023-09-27 18:14:35

我正在使用photoshop .jsx脚本编写一些XMP元数据:

var xmp = new XMPMeta( activeDocument.xmpMetadata.rawData); XMPMeta.registerNamespace(nameSpace, nsPrefix);

,然后向这个新的命名空间添加一些数据。我可以在Photoshop中通过检查File -> FileInfo查看它。我的问题是如何使用我的c#项目中的元数据提取器库访问这些数据?当我使用以下代码时,我没有看到我在任何目录中添加的新元数据:

FileStream OriginalFile = new FileStream("C:''Users''av''Desktop''test.tif", FileMode.Open, FileAccess.Read, FileShare.Read); IEnumerable<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(OriginalFile);

编辑:

我可以循环遍历所有属性但是当我尝试执行

var xmpDirectory = ImageMetadataReader.ReadMetadata("path/test.tif").OfType<XmpDirectory>().FirstOrDefault(); xmpDirectory.XmpMeta.GetProperty("http://ns.adobe.com/xap/1.0/mm/xmpMM:DerivedForm/", "stRef:documentID")

我得到一个异常。当我通过Photoshop查看它时,属性是存在的。

xmp data in photoshop

使用c#中的元数据提取器获取自定义XMP元数据

XMP数据存储在XmpDirectory中。通过:

访问
var xmpDirectory = ImageMetadataReader.ReadMetadata("path'test.tif")
    .OfType<XmpDirectory>().FirstOrDefault();

请注意,元数据提取器中的XMP数据不遵循其他目录的标准标记/值格式。相反,您应该访问该目录的XmpMeta属性,以便检查该数据。

你可以这样写代码:

foreach (var property in xmpDirectory.XmpMeta.Properties)
    Console.WriteLine($"Path={property.Path} Namespace={property.Namespace} " +
                       "Value={property.Value}");

这里有更多的讨论,这里有更多关于XMP库的信息。