О Прогрессе

А сейчас, дети, мы возьмем обычный такой JPEG-файл. Не который JFIF, а который EXIF.

И попытаемся спроектировать код, который достанет оттуда цветовую информацию.

Возьмем в одну руку стандарты (EXIF 2.3, DCF2.0), а в другую - ПРАВДУ в виде описания тегов автором Exiftool, потому что Phil Harvey видел реальную жизнь, а авторы стандарта - нет.

Цветовая информация в EXIF может быть задана такими тегами.

  1. Тег InteropIndex: DCF Basic (sRGB), DCF Optional (формально это расширенное описание "там дальше, по факту - Optional могут ставить как ЕДИНСТВЕННЫЙ признак Adobe RGB).
  2. Тег ColorSpace:
    • По стандарту: sRGB и Uncalibrated (во втором случае, согласно стандарту, используется задание цвета, описанное в следующем пункте).
    • По жизни: sRGB, AdobeRGB, WideGamut RGB, ICC Profile, Uncalibrated. Со смешным комментарием от от автора Exiftool:the value of 0x2 is not standard EXIF. Instead, an Adobe RGB image is indicated by "Uncalibrated" with an InteropIndex of "R03". The values 0xfffd and 0xfffe are also non-standard, and are used by some Sony cameras.
  3. Для случая Uncalibrated: тегами WhitePoint/PrimaryChromaticities/Gamma: можно записать любой 3-компонентный (матричный) профиль. Тоже немножко смешно т.к. кроме Gamma (числом) есть TransferFunction в виде таблицы.
  4. Тегом ICCProfile (в стандарте не описан): прямо вот можно ICC-профиль положить. Тега нет в спецификации EXIF 2.3, а он есть, как тот суслик.
    Еще есть AsShotICCProfile/CurrentICCProfile, но забудем про них временно.
  5. Вишенка на торте: в JPEG-данных, в секции APP2, если начать ее с байтов ICC_PROFILE, можно записать вот прямо ICC-профиль.

И хорошо, когда жизнь протекает по стандарту: для DCF Optional в ColorSpace написали Uncalibrated, а дальше тегами задали 3-цветный профиль. Но ведь жизнь сильно богаче.

Вот к примеру Фотошоп пишет для нестандартных профилей: ColorSpace - Uncalibrated, а дальше на EXIF-стандарт плюет и пишет профиль в JPEG APP2.

Но где это (нецензурно!) написано? Откуда уверенность, что JPEG-читалка такое прочтет? А если в ColorSpace будет 1 (sRGB) - мы должны читать этот APP2, или нет, или что?

И вот так в этом мире Imaging - все. Вообще все.

И это мы еще не дошли до других подробностей. В файле может быть XMP-блок, тоже с цветовыми данными (а может не быть цветовых данных, но быть XMP-блок). Могут быть сохраненные MakerNotes от оригинального файла. Не модифицированные, хотя вот наш JPEG уже три раза поредактировали и два раза сменили ему Color Space.

P.S. Понятно, я прикручу к нашему софту некую внятную логику. Ну там "если что-то указывает на sRGB - значит sRGB", иначе поискать профиль, иначе untagged. Но как я этих всех (авторов стандартов, авторов софта, авторов firmware) уже ненавижу....

Comments

Авторов стандартов нет потому что их уже расстреляли.

Если бы.
Они, поди, сидят в катакомбах и готовят EXIF 3.0

Авторы софта, вероятно, мягко вынуждают использовать ИХ софт, ибо ПРАВДА только у них. А другого софта — их, ибо их правда правдивее.

Да не, этот бардак - следствие всеобщего бардака.

Ну вот смотрим в стандарт(ы) - способа задать ICC Profile в EXIF нету. После чего все упражняются в меру своей фантазии.

И TIFF, и EXIF созданы так, что "не стесняют движений". То есть есть обязательные тэги, есть рекомендованные, а есть - "фирменные". И даже публиковать смысл этих "фирменных" тэгов стандарт не обязывает, да и сам механизм публикации не предусмотрен. Как обрабатывать такие недокументированные "фирменные" тэги - тем более загадка. Далее, на основе тэгов можно слепить несколько разных последовательностей обработки. Какая правильная - это "кроксворд".

Производитель может в некоторых случаях плевать на им же созданные тэги. Так, например, при конвертации в DNG Adobe прописывает baseline exposure. Для камер Fuji X10, XF1, XS1 (например) ACR/Lr значение в этом тэге игнорируют. Да и задачка описать 2 изображения одним набором тэгов выглядит поставленной неправильно.

В общем, выход один: смириться и вникать.

> Для камер Fuji X10, XF1, XS1 (например) ACR/Lr значение в этом тэге игнорируют.

может просто bug, а не умышленно...

EXR же, там специфическое всё.

Ну не до такой же степени, чтобы игнорировать теги, придуманные вот прямо в Adobe?

подковерная борьба в офисе !!!

Да, группа Fuji бьется с группой DNG за Performance Review!

Так они наверняка ж ещё что-то впихнули для таких сенсоров. Вероятно, baseline exposure их чем-то не устраивал, и, чтобы не модифицировать код, просто пошли в обход. Эдоби — это ж вообще отдельная история :)

всего-то 5 пунктов... радоваться же надо !