Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

JPG

Автор следующей информации: Oliver Fromme. Leibnizstr. 18-61 38678 Clausthal. GERMANY

JPEG/JFIF формат файла:

  • заголовок (2 байта): $ff, $d8 (SOI) (эти два идентифицируют JPEG/JFIF файл)
  • для JFIF файлов, сегмент APP0 немедленно следует за маркером SOI, смотрите ниже
  • любое число "сегментов" (подобно IFF (Image File Format) кускам), смотрите ниже
  • хвостовик (2 байта): $ff, $d9 (EOI)

Формат сегмента:

  • заголовок (4 байта): $ff идентифицирует сегмент
    n тип сегмента (один байт)
    sh, sl - размер сегмента, включая эти два байта, но не включая $ff и байт типа. Примечание, не порядок Intel: сначала старший байт, затем младший байт!
  • содержимое сегмента, максимум 65533 байта.

Примечания:

  • Есть сегменты без параметров (обозначенные '*'), которые не имеет спецификацию размера (и никакого содержания), просто $ff и байт типа.
  • Любое число $ff байтов между сегментами легальное и должно быть пропущено.

Типы сегментов:

  • *TEM = $01 обычно вызывает ошибки декодирования, может быть проигнорировано
  • SOF0 = $c0 Начало Кадра (Baseline JPEG), относительно деталей смотрите ниже
  • SOF1 = $c1 dito
  • SOF2 = $c2 обычно неподдерживаемый
  • ...
  • SOF9 = $c9 для арифметического кодирования, обычно не поддерживается
  • SOF10 = $ca обычно неподдерживаемый
  • ...
  • DHT = $c4 Определение Таблицы Хаффмана, относительно деталей смотрите ниже
  • JPG = $c8 неопределенный/зарезервированный (вызывает ошибки декодирования)
  • DAC = $cc Определение Арифметической Таблицы, обычно не поддерживается
  • *RST0 = $d0 RSTn используются для синхронизации, может быть проигнорировано
  • ...
  • *RST7 = $d7
  • SOI = $d8 Начало Изображения
  • EOI = $d9 Конец Изображения
  • SOS = $da Начало Сканирования, относительно деталей смотрите ниже
  • DQT = $db Определение Таблицы Квантования, относительно деталей смотрите ниже
  • DNL = $dc обычно неподдерживаемый, игнорировать
  • DRI = $dd Определение Интервала Перезапуска, относительно деталей смотрите ниже
  • APP0 = $e0 JFIF маркеры сегментов приложения, относительно деталей смотрите ниже
  • APP15 = $ef игнорировать
  • COM = $fe Комментарий, относительно деталей смотрите ниже
  • Все другие типы сегментов резервируются и должны быть проигнорированы (пропущены).

SOF0: Начало Кадра 0:

  • $ff, $c0 (SOF0)
  • длина (старший байт, младший байт), 8+components*3
  • точность данных (1 байт) в битах/единицу, обычно 8 (12 и 16 не поддерживается большинством программного обеспечения)
  • высота изображения (2 байта, High-Low), должно быть >0, если DNL не поддерживается
  • ширина изображения (2 байта, High-Low), должно быть >0, если DNL не поддерживается
  • количество компонентов (1 байт), обычно 1 = черно-белый, 3 = цвет YCbCr или YIQ, 4 = цвет CMYK)
  • для каждого компонента: 3 байта
  • идентификатор компонента (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q)
  • показатели дискретизации (бит 0-3 вертикальной, 4-7 горизонтальной)
  • номер таблицы квантования

Замечания:

  • JFIF использует также 1 компонент (Y, черно-белое изображение) или 3 компонента (YCbCr, иногда называемое YUV, цветное).

APP0: JFIF маркер сегмента:

  • $ff, $e0 (APP0)
  • длина (старший байт, младший байт), должна быть >= 16
  • 'JFIF'#0 ($4a, $46, $49, $46, $00), идентифицирует JFIF
  • номер общей версии, должен быть 1 (в противном случае ошибка)
  • номер подверсии, должен быть 0..2 (в противном случае попытка декодирования по-другому)
  • единица для x/y разрешения:
0 = нет никаких единиц, x/y-отношение определяет соотношение аспекта
1 = x/y-разрешение в точках/дюйм
2 = x/y-разрешение в точках/сантиметр
  • x-разрешение (старший байт, младший байт), должно быть <> 0
  • y-разрешение (старший байт, младший байт), должно быть <> 0
  • ширина предварительного просмотра (1 байт)
  • высота предварительного просмотра (1 байт)
  • n байт для предварительного просмотра (RGB 24 бит) n = ширина*высота*3

Замечания:

  • Если нет 'JFIF'#0, или длина <16, тогда это - вероятно не JFIF сегмент и должен быть проигнорирован.
  • Нормально единицы=0, x-разрешение=1, y-разрешение=1, означает, что отношение числа точек - 1:1 (равномерно масштабированное).
  • JFIF файлы с предварительным просмотром встречаются очень редко, предварительный просмотр может обычно быть проигнорирован. Если нет предварительного просмотра, тогда ширина=0 и высота=0.
  • Если длина не соответствует размеру предварительного просмотра, можно выдать предупреждение, затем продолжить декодирование.

DRI: Определение Интервала Перезапуска:

  • $ff, $dd (DRI)
  • длина (старший байт, младший байт), должна быть = 4
  • интервал перезапуска (старший байт, младший байт) в единицах блоков MCU, означает, что каждые n блоков MCU может быть найден маркер RSTn.
  • Первый маркер будет RST0, затем RST1 и т.п., после RST7 повторится с RST0.

DQT: Определение Таблицы Квантования:

  • $ff, $db (DQT)
  • длина (старший байт, младший байт)
  • информация о таблице квантования (1 байт):
биты 0..3: номер таблицы (0..3, в противном случае ошибка)
биты 4..7: точность таблицы,
0 = 8 бит, в противном случае 16 бит
  • n байт таблицы n = 64*(точность+1)

Замечания:

  • Единственный сегмент DQT может содержать несколько таблиц, каждая со своим собственным байтом информации.
  • Для точности=1 (16 бит), порядок является High-Low (Старшим-Младшим) для каждого из 64 целых значений.

DAC: Определение Арифметической Таблицы:

Текущее программное обеспечение не поддерживает арифметическое кодирование по законным причинам. JPEG файлы, использующие арифметическое кодирование не могут быть обработаны.

DHT: Определение Таблицы Хаффмана:

  • $ff, $c4 (DHT)
  • длина (старший байт, младший байт)
  • информация о таблице Хаффмана (1 байт):
биты 0..3: число таблиц (0..3, в противном случае ошибка)
бит 4 : тип таблицы, 0 = таблица DC, 1 = таблица AC
биты 5..7: не используются, должны быть 0
  • 16 байт: количество символов с кодами длины 1..16, сумма этих байтов является общим числом кодов, которые должны быть <= 256
  • n байт: таблица, содержащая символы в порядке повышения длины кода (n = общее число кодов)

Замечания:

  • Единственный сегмент DHT может содержать несколько таблиц, каждая со своим собственным байтом информации.

COM: Комментарий:

  • $ff, $fe (COM)
  • длина (старший байт, младший байт) комментария = L+2
  • Комментарий = байтовый поток длиной L

SOS: Начало Сканирования:

  • $ff, $da (SOS)
  • длина (старший байт, младший байт), должна быть 6+2*(количество компонентов сканирования)
  • количество компонентов сканирования (1 байт), должно быть >=1 и <=4 (в противном случае ошибка), обычно 1 или 3
  • для каждого компонента: 2 байта
  • идентификатор компонента (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q), смотри SOF0
  • использование таблицы Хаффмана:
биты 0..3: таблица AC (0..3)
биты 4..7: таблица DC (0..3)
  • 3 байта, которые должны игнорироваться

Замечания:

  • Данные об изображении (данные сканирования) следуют сразу за сегментом SOS.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог