Получение пользовательских метаданных 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")
Я получаю исключение. Свойство присутствует, когда я смотрю на него через фотошоп.
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 здесь.