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

StackOverflow https://stackoverflow.com/questions/52739

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Файл Jpeg будет начинаться с /9j/

GIF-файл будет начинаться с R0l (Это ноль в качестве второго символа).

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

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

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

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

http://www.wotsit.org

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top