У меня есть много jpeg файлов с переменным размером изображения. Например, вот первые 640 байтов, как дано hexdump изображения размера 256*384 (пиксели):
0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048 ......JFIF.....H
0000010: 0048 0000 ffdb 0043 0003 0202 0302 0203 .H.....C........
0000020: 0303 0304 0303 0405 0805 0504 0405 0a07 ................
0000030: 0706 080c 0a0c 0c0b 0a0b 0b0d 0e12 100d ................
Я предполагаю информацию о размере mus быть в этих строках. Но не может видеть, какие байты дают размеры правильно. Кто-либо может помочь мне найти поля, который содержит информацию о размере?
Согласно разделу Синтаксис и структура на странице JPEG в Википедии , ширина и высота изображения не кажутся храниться в самом изображении - или, по крайней мере, не таким образом, чтобы его было легко найти.
Тем не менее, цитата из FAQ по сжатию изображений JPEG, часть 1/2 :
Тема: [22] Как моя программа может извлекать размеры изображения из файла JPEG ?
Заголовок файла JPEG состоит из серии блоков, называемых «маркерами». Высота и ширина изображения хранятся в маркере типа SOFn (Начало кадра, тип N) .
Чтобы найти SOFn , вы должны пропустить предыдущие маркеры; вам не нужно знать, что есть в других типах маркеров, просто используйте их длинные слова, чтобы пропустить их.
Минимальная необходимая логика - это , возможно, страница кода C.
(Некоторые люди рекомендуют просто искать пару байтов, представляющую SOFn, , не обращая внимания на структуру блока маркера . Это небезопасно { {1}}, потому что предыдущий маркер может содержать шаблон SOFn либо случайно, либо потому, что он содержит сжатое в формате JPEG изображение эскиза. Если вы не следите за { {1}} структура маркера, которую вы получите размер эскиза вместо размера основного изображения.)
Обильно прокомментированный пример на языке C можно найти в { {1}} rdjpgcom.c в дистрибутиве IJG (см. Часть 2, пункт 15).
Perl-код можно найти на wwwis по адресу http://www.tardis.ed.ac.uk/~ark/wwwis/ .
(Эх, эта ссылка кажется неработающей ...)
Вот часть кода C, которая может вам помочь: Расшифровка ширины и высоты файла JPEG (JFIF)