使用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
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库的信息。