首页 文章

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

提问于
浏览
1

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

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

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

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

Edit: 我可以遍历所有属性,但是当我尝试时

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

1 回答

  • 0

    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}");
    

    更多讨论here以及有关XMP库here的更多信息 .

相关问题