Есть ли способ определить, какой формат изображения у файла, не читая весь файл?

Есть ли хороший способ узнать, в каком формате находится изображение, не считывая весь файл в память?

Очевидно, что это будет варьироваться от формата к формату (меня особенно интересуют файлы TIFF), но какая процедура будет полезна для определения того, какой формат изображения используется в файле, не считывая весь файл?

БОНУС: Что, если изображение является строкой в ​​кодировке Base64? Любой надежный способ сделать вывод, прежде чем расшифровать его?

5 ответов

Решение

Большинство форматов файлов изображений имеют уникальные байты в начале. Unix file Команда просматривает начало файла, чтобы увидеть, какой тип данных он содержит. Смотрите статью в Википедии о Магических числах в файлах и ht tp://magicdb.org/.

Конечно, есть. Как и другие, упомянутые выше, большинство изображений начинаются с какой-то "магии", которая всегда будет переводиться в данные Base64. Ниже приведено несколько примеров:

Растровое изображение начнется с Qk3

Jpeg начнется с /9j/

GIF начнется с R0l (Это ноль в качестве второго символа).

И так далее. Нетрудно взять разные типы изображений и выяснить, что они кодируют. Просто будьте осторожны, так как у некоторых есть больше чем одно волшебство, поэтому вам нужно учесть их в своем "коде перевода" B64.

Или file в командной строке *nix или чтение начальных байтов файла. Большинство файлов имеют уникальный заголовок в первых нескольких байтах. Например, заголовок TIFF выглядит примерно так:

 0x00000000: 4949 2:00 0800 0000 
Для получения дополнительной информации о формате файла TIFF, особенно если вы хотите узнать, что означают эти байты, перейдите сюда.

TIFF начинаются со II или MM (порядок байтов Intel или Motorolla).
Спецификацию TIFF 6 можно скачать здесь, и не так уж сложно следовать

Полный сайт форматов файлов доступен по адресу:

http://www.wotsit.org/

Другие вопросы по тегам