Есть ли способ определить, какой формат изображения у файла, не читая весь файл?
Есть ли хороший способ узнать, в каком формате находится изображение, не считывая весь файл в память?
Очевидно, что это будет варьироваться от формата к формату (меня особенно интересуют файлы 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 можно скачать здесь, и не так уж сложно следовать
Полный сайт форматов файлов доступен по адресу: