Я пишу библиотеку с открытым исходным кодом для извлечения метаданных изображений и хранения как XMP, сериализованных в XML-кодеке (идеально идентично тому, как приложения Adobe сериализуют свои метаданные).
Моя проблема в том, что BitmapMetadata имеет все необходимые мне значения, но ключи искалечены. Многие из них являются целыми числами, а не соответствующими им именами имен XML-имен XMP. Microsoft утверждает, что они используют XMP для хранения, читает/записывает много разных форматов метаданных в среде, но я не вижу способа восстановить некоторые из стандартных имен XMP из них.
Например, Name= "/{ushort=272}"
, Format = "ifd"
- это то, что у меня есть, но мне нужно <tiff:Model>
где xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
. Для этого я могу использовать ExifTags из моей ExifUtils library, чтобы отобразить некоторые из ключей, потому что я знаю, что это такое. Я не уверен в отношении многих других, хотя.
Мой вопрос:
Кто-нибудь достаточно знакомый с BitmapMetadata, чтобы знать, если я возглавил тупик?
Существует ли стандартизованное сопоставление, кодируемое Microsoft? Я еще не нашел его в Официальные спецификации XMP от Adobe.
Обновление: исходный код для этой библиотеки теперь доступен в Google Code как библиотека XmpUtils. Он поддерживает чтение/запись метаданных XMP в качестве стандартного XML на основе RDF.
Как выясняется, компонент Windows Imaging (WIC), используемый BitmapMetadata, читает/записывает множество различных типов блоков метаданных, включая TIFF, EXIF, IPTC и XMP. Это объясняет, почему, к сожалению, их объектная модель не очень тесно связана с моделью сериализации XMP; он очень обобщен.
Ключевое сопоставление, которое я искал, зависит от того, какой раздел декодируется, и даже в случае XMP это не совсем чистое преобразование. Ссылки MSDN в другом ответе дают подробное описание языка запросов метаданных, который является синтаксисом типа XPath, который WIC использует для ссылки на разделы метаданных в среде. Это полезно для разбора каждого сегмента пути в ключ, который затем может использоваться для определения соответствующего пространства имен и имени XMP.
Как я уже упоминал в вопросе, теперь я создал эту библиотеку, которая правильно преобразует очень высокий процент свойств метаданных из блоков TIFF, EXIF и XMP.
См. исходный код библиотеки XmpUtils, чтобы узнать подробности о том, как я закончил извлечение этих данных стандартным образом.
Кажется, я наткнулся на сопоставление клавиш на стр. 18 в третьей части спецификации XMP. Похоже, что BitmapMetadata
просто раскрывает разделы данных XMP с кодировкой JPEG:
Типы маркеров FFE0-FFEF являются обычно используемый для данных приложения, названный APPn. По соглашению APPn маркер начинается с строки определение использования, называемое пространство имен или подпись. APP1 маркер идентифицирует Exif и TIFF метаданные; маркер APP13 обозначает Photoshop Image Resource (PSIR), который содержит метаданные IPTC; другой APP1 маркер обозначает местоположение XMP-пакет.
Не уверен, откуда заканчивается окончательный список, поскольку это кажется неполным.
Update:
Я просто наткнулся на набор страниц MSDN ( "Политика метаданных фотографий" ), который ссылается на довольно полный список запросов метаданных Microsoft Языковые пути (слева) для каждого свойства, которое они поддерживают. Это абсолютно ужасный формат с одним путём на страницу, но мне кажется, что это очень много данных. К сожалению, похоже, что существуют разные пути для JPEG и TIFF...
Update:
Также эта страница является ключевой, поскольку она определяет сумасшествие, которое является синтаксисом XPath: Обзор языка запросов метаданных