Получение пользовательских метаданных XMP с использованием экстрактора метаданных в C#

Я пишу некоторые метаданные XMP, используя скрипт photoshop .jsx, используя:

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

Я получаю исключение. Свойство присутствует, когда я смотрю на него через фотошоп.

данные xmp в фотошопе

1 ответ

Решение

Данные 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 здесь.

Другие вопросы по тегам