Определение таблицы квантования файла JPEG

Когда я использую функцию Photoshop «Сохранить как» и выбираю формат файла jpeg, я получаю следующее окно:

введите здесь описание изображения

Как видите, я выбираю формат Базовый ("Стандартный") и максимальное качество изображения. Когда я открываю это изображение в шестнадцатеричном редакторе, я вижу несколько маркеров FF DB (которые являются началом таблиц квантования). Пока нет проблем, но давайте посмотрим на следующую картинку: введите здесь описание изображения

Как вы можете видеть на картинке выше, в адресной строке BDA начинается маркер FFDB. Первые два байта — 00 84, что означает, что этот маркер содержит 132 байта данных. Проделав некоторые математические вычисления, мы можем сделать вывод, что этим маркером определяются две таблицы квантования. Значения первой таблицы: 0C 08 08 08 09 и т.д...

В том же файле есть еще один маркер FFDB, начиная с адресной строки 2885, как вы можете видеть на рисунке:

введите здесь описание изображения

Опять же, значение первых двух байтов равно 00 84, что означает 132 байта данных. Но на этот раз первые значения таблицы квантования: 01 01 01 и т. д.

Как узнать, какой из маркеров FF DB следует использовать и почему в файле несколько маркеров FFDB?


person MrD    schedule 14.02.2012    source источник
comment
Мистер М. - по таким вопросам вы можете просто написать мне напрямую :)   -  person BitBank    schedule 14.02.2012


Ответы (1)


Не видя весь файл, трудно сказать с уверенностью, но похоже, что ваша первая таблица квантования предназначена для встроенной миниатюры, сжатой с более низким качеством. Вторая таблица квантования предназначена для основного изображения и имеет значения 01,01,01,..., потому что вы выбрали самое высокое качество и, следовательно, значения коэффициентов квантуются на минимально возможную величину.

person BitBank    schedule 14.02.2012
comment
Вау, спасибо! Теперь я знаю, что в одном файле JPEG может быть несколько QT. Но - 1 вопрос: могу ли я полагаться на то, что последовательность байтов 0xFFDB (или, скорее: 0xFFDB0043 для одного QT и 0xFFDB0048 для двух QT) всегда будет сопровождаться некоторым QT, или нам нужен лучший способ найти КТ? - person Tomasz Gandor; 13.02.2020
comment
@TomaszGandor Данные JPEG устроены так, что любая последовательность байтов, начинающаяся с 0xFF (за которой не следует 0x00), является маркером, поэтому да, 0xFFDB всегда будет таблицей квантования. Следующие 2 байта — длина в обратном порядке. Поскольку QT должен включать 64 значения, 0x43 соответствует 1 таблице, а 0x84 — 2. - person BitBank; 13.02.2020
comment
Имейте в виду, что «настоящая» таблица квантования начинается не сразу после поля длины, а на 1 байт позже. Во второй таблице также добавлен 1 байт Pq&Tq. См. w3.org/Graphics/JPEG/itu-t81.pdf. (Б.2.4.1). - person user136036; 26.02.2020