Reading view

[Перевод] Регрессивные JPEG

Одно из удобных свойств файлов JPEG заключается в том, что в них можно опционально сохранять первыми низкочастотные компоненты. Это означает, что частично скачанное изображение будет отображаться в низком разрешении, а не обрезаться снизу.

Внутри файла это реализуется разбиением сжатых данных на несколько «сканов», перед каждым из которых добавляется заголовок. Вот первый скан изображения:

FF DA - Маркер "начало скана"

00 0C - Поле длины в big endian (12 байт); включает и свою длину

03 - Количество каналов в скане (3)

01 - Глобальный id первого включённого канала

00 - Индекс 1 таблицы Хаффмана (DC: 0, AC: 0)

02 - Глобальный id второго включённого канала

10 - Индекс 2 таблицы Хаффмана (DC: 1, AC: 0)

03 - Глобальный id третьего включённого канала

10 - Индекс 2 таблицы Хаффмана (DC: 0, AC: 0)

00 - Начальный коэффициент DCT (DC)

00 - Конечный коэффициент DCT (тоже DC)

01 - Точность: половинная, предыдущие данные отсутствуют.

f8ad 512d d3f1 cd96 - Зашифрованные кодом Хаффмана коэффициенты DCT

bcb0 58df 53d5 5d97 [...и так далее]

В него включён самый низкочастотный коэффициент (DC-компонент) преобразования Фурье для всех трёх цветовых каналов.

В качестве трёх цветовых каналов вместо привычного RGB используется YCbCr. Яркость (Luminance, Y) отделена, потому что должна иметь высокое качество, а цвета можно передавать кое-как и они всё равно будут выглядеть неплохо.

Читать далее
  •  
❌