Есть ли способ определить, какой формат изображения у файла, не читая весь файл? - PullRequest
11 голосов
/ 09 сентября 2008

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

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

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

Ответы [ 5 ]

17 голосов
/ 09 сентября 2008

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

4 голосов
/ 19 сентября 2008

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

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

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

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

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

0 голосов
/ 12 сентября 2008

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

0 голосов
/ 12 сентября 2008

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

http://www.wotsit.org

0 голосов
/ 10 сентября 2008

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

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