Определение цветового профиля в формате JPEG - PullRequest
5 голосов
/ 22 сентября 2009

Я хотел бы иметь возможность обнаруживать наличие цветового профиля в JPEG. Чтобы было ясно: я не заинтересован в том, чтобы на самом деле проводить коррекцию цвета или делать что-либо еще с ними.

Я провел некоторое расследование, но не смог найти какой-либо определенный источник информации. Вот что я знаю до сих пор:

  • В блоке XMP имеется информация о цветовом профиле. Блок XMP находится в разделе 0xFFE1 JPEG (так же, как EXIF). За маркировкой этого раздела следует строка http://ns.adobe.com/xap/1.0/. Однако, когда я удалил этот раздел, Photoshop все же смог обнаружить цветовой профиль.

  • В самом EXIF ​​ также есть тег цветового пространства (tag = 0xA001 ). Он имеет только одно значение, определенное в спецификации EXIF: 1 = sRGB. Я заметил, что в моем изображении оно принимает значение 0xFFFF, что означает некалиброванный. Так что это не этот тег.

  • Я провел эксперимент с одним изображением, сохранив его в двух разных цветовых профилях, и, кроме изменений в XMP и EXIF, я заметил, что, вероятно, существует целый новый раздел JPEG. Он начинается с 0xFFE2 , а за его маркером следует строка ICC_PROFILE . Это наиболее вероятный случай.

У кого-нибудь есть опыт управления цветовыми профилями в формате JPEG? Я бы сказал, что информация в EXIF ​​и XMP - это просто метаданные, и что важно наличие секции ICC_PROFILE.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2016

Профили ICC хранятся в сегментах приложения файла JPEG. Эти блоки позволяют приложениям хранить любые данные, которые им нужны, поэтому они не соответствуют спецификации JPEG. Другими словами, формат файла JPEG не определяет способ встраивания цветовых профилей, вы просто видите де-факто способы сделать это.

Поскольку сегменты приложения могут использоваться кем-либо для чего-либо, вам необходимо идентифицировать и проверить содержимое, прежде чем вы сможете с уверенностью сказать, что оно содержит профиль ICC.

Таким образом, существует три способа предоставления профилей ICC:

  • Встраивая профиль ICC в сегмент приложения 02 с добавлением ICC_PROFILE\0x00\0x01\0x01 для его идентификации. В настоящее время я не уверен, что два \0x01 означают что-то, или они всегда таковы. После этих 14 символов сохраняется фактический профиль ICC.
  • Встраивая профиль ICC во встроенный файл метаданных EXIF ​​в сегменте приложения 01.
  • Путем встраивания профиля ICC во внедренный файл метаданных XAM в сегменте приложения 01. К этому добавляется http://ns.adobe.com/xap/1.0/\0x00.

Мне также не удалось найти какую-либо конкретную информацию. Было бы хорошо, если бы ICC сказал: «Вот как это сделать», но я пока не смог найти ничего подобного. Таким образом, насколько я знаю, любой из них может потенциально использоваться в качестве профиля ICC, и это будет зависеть от приложения от того, будет ли оно загружать профиль или нет. Сегмент приложения 02, кажется, является обычным способом сделать это, хотя то, что вы хотите проверить, может зависеть от вашего варианта использования. Как показал другой комментарий, некоторые программы HELIOS EtherShare имеют / имеют свой собственный способ сделать это. (Я еще не подтвердил наличие профиля ICC в метаданных, однако я не выглядел так уж сложно, и меня не удивило бы, если бы вы могли найти файлы с несколькими конфликтующими профилями ICC в дикой природе.)

1 голос
/ 22 сентября 2009

Вот информация о профилях ICC в формате JPEG: http://209.85.129.132/search?q=cache%3ANx_M6GRbZzYJ%3Awww.helios.de%2FPDFs%2FICC-tag.pdf+JPEG+format+ICC+offset&hl=ru&gl=ru

Это из кеша Google.

...