Получение Размера изображения JPEG от его двоичного файла

У меня есть много 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 быть в этих строках. Но не может видеть, какие байты дают размеры правильно. Кто-либо может помочь мне найти поля, который содержит информацию о размере?

8
задан rajeshsr 25 March 2010 в 17:21
поделиться

1 ответ

Согласно разделу Синтаксис и структура на странице 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)

10
ответ дан 5 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: