Я пишу приложение, которое читает / записывает метаданные для изображения (оно конвертирует необработанный файл в формат jpeg / tiff), и мне нужно записать метаданные о камере / режиме / … в сгенерированный файл JPEG.
Я знаю, что я могу сделать это с помощью exif и в Windows я использую GDI для этого. Но я читаю информацию о xmp и xmp sdk из Adobe.
Мне интересно, какой я должен использовать? exif или xmp?
Как они связаны друг с другом?
Почему кто-то может выбрать запись метаданных exif, а кто-то другой может выбрать XMP? Каковы плюсы / минусы выбора любого из них.
Я пишу в C ++ на Windows (Visual Studio 2012)
Если вы пишете в формате JPEG или TIFF, я думаю, что вы должны придерживаться Exif.
Все читатели формата TIFF смогут анализировать Exif, так как Exif является подмножеством TIFF (суб-IFD со специальными тегами, определенными Exif). Большинство читателей «JPEG» также знают, как анализировать Exif / TIFF.
Конечно, вы также можете добавить XMP в файл, но я предлагаю вам сделать это в дополнение к обычному Exif, и только если вам это действительно нужно.
XMP допускает более богатые метаданные. Но поскольку метаданные, которые вы получили, взяты из файла RAW камеры, я бы подумал, что они отображаются непосредственно на теги Exif, учитывая, что Exif был разработан индустрией цифровых камер именно для описанного вами использования.
Итак, в основном: используйте Exif, потому что он имеет лучшую поддержку инструментов. Добавляйте XMP, только если вам это нужно, для более богатых метаданных.
XMP действительно отображает значения в теги exif.
И EXIF, и XMP являются богатыми источниками метаданных изображения.
Преимущество XMP в том, что он легко читается, и любое приложение с поддержкой XMP (как и все продукты Adobe) может манипулировать этими свойствами.
XMP извлекает значения из собственных значений в изображении, поэтому в основном XMP обеспечивает сопоставление свойств в блоке exif в изображениях и согласовывает эти значения в пространствах имен XMP, как определено в документации ADOBE XMP SDK.
Преимущество использования XMP SDK для манипулирования метаданными заключается в том, что ответственность за согласование различных форматов метаданных изображений (например, exif, IPTC или XMP) во время чтения или записи переносится в XMP SDK.
Если в свойство XMP вносятся какие-либо изменения, оно отражается обратно в exif-блок изображения. Аналогично, если какое-либо приложение, не поддерживающее XMP, изменило метаданные exif без изменения соответствующего значения xmp, во время операции чтения XMP SDK будет согласовывать это изменение со значением XMP, и во время записи это изменение будет сохранено обратно.
Использование XMP SDK позволяет манипулировать метаданными в основном проще, так как вы можете оставить много специфичных для формата деталей вплоть до SDK для обработки.
Более подробная информация о различных источниках метаданных изображений доступна в Рабочей группе по метаданным.
Полная спецификация может быть загружена с Вот.