Я испытываю затруднения при понимании спецификации ITU-T T.81 для формата файла JPEG. Надо надеяться, кто-то еще здесь попытался проанализировать файлы JPEG и/или знает о деталях этого формата файла.
Спецификация indiates, который сегмент ECS0 запускает после сегмента SOS, но я не могу найти, где в спецификации это на самом деле говорит о формате сегмента ECS0 или как действительно обнаруживают его запуск. Простые реализации JPEG онлайн имеют ограниченную справку, потому что они принимают много вещей о JPEGs, который они анализируют.
Кто-либо может указать на меня в правильном направлении?
К вашему сведению: спецификация формата файла JPEG здесь.
Когда в стандарте говорится о ECS, он не относится к нему как к типу сегмента, как SOS, с компонентом заголовка и размера; это буквально необработанный сжатый по Хаффману битовый поток, представляющий MCU, которые содержат данные изображения. Он дополняется для заполнения целого числа байтов и может при желании чередоваться с заголовками RST (формально заголовки RST отделены от ECS).
Когда в стандарте указано ECS 0 , это означает 0-й (первый) запуск ECS, а не конкретный тип ECS, например, различные типы SOF0 / SOF1 / SOF2 / и т. Д.
Пример базового DCT:
FF DA // SOS header
00 08 // 8 bytes
01 // 1 channel
01 00 // channel 1 QT 0 HT 0
00 3F 00 // start/end spectral selector, successive approximation bit high/low
12 34 56 78 ... // Huffman-compressed MCU raw data
(sequence of Fuffman codes looked-up in AC/DC Huffman tables)
FF D9 // EOI
Удобная бесплатная программа для объяснения структуры JFIF - это JPEGsnoop ( http://www.impulseadventure.com/photo/jpeg-snoop.html ) . В меню есть опция «Полное декодирование», которая показывает необработанный битовый поток Хаффмана, как он отображается на символы Хаффмана, деквантизируется и затем отображается в компоненты DCT.