Это поведение одинаково во всех форматах файлов изображений (или форматах в целом)?
Для большинства из них да.Есть несколько проприетарных форматов (например, для игр), которые могут иметь очень короткие метаданные или вообще не иметь их.Кроме того, метаданные могут находиться в другом файле (например, анимации вместе с метаданными XML).
Может ли файл изображения (без расширения) распознаваться только по этим данным?
Да.Фактически, большинство программ просмотра изображений предупреждают вас, если файл изображения имеет неправильное расширение, и спрашивают вас, должны ли они это исправить.
В системах Unix есть file
команда , которая определяетфайлы на основе их метаданных.Существует лучший инструмент для изображений, называемый identifier (часть ImageMagick) , который возвращает более подробную информацию о разрешении, битовой глубине и т. Д.
Доступна ли информация о том, как эти метаданныесломан?Под этим я подразумеваю, что данные в каком месте в метаданных имеют какое значение?
Существуют книги о форматах файлов (изображений), и для большинства форматов эта информация доступна в официальных спецификациях (например, * 1024).* RFC 2083 для PNG).Они перечисляют все (необязательное) содержимое файла, описывают сжатия и то, что зритель / декодер / кодировщик может / должен / должен сделать с данными.Хорошей отправной точкой может послужить список файлов изображений Wikipedia .
Обратите внимание, что на основании приведенных вами примеров я предполагаю, что вы открывали файлы в текстовом редакторе, который не является идеальным инструментом дляэта задача.Для этого лучше использовать hex-редактор .Текстовые редакторы не будут отображать большинство байтов (например, 255) по умолчанию и интерпретировать другие (например, табуляцию или перевод строки).Они могут быть достаточно хороши, чтобы видеть магические текстовые строки, такие как «BM» и «PNG», но с помощью шестнадцатеричного редактора вы можете видеть как эти текстовые части, так и их числовое представление - например, позволяя извлекать ширину и высоту изображения.Для этого полезен какой-то инструмент для преобразования шестнадцатеричных значений в десятичные, большинство калькуляторов могут это сделать.
В качестве примера давайте рассмотрим начало файла PNG с разрешением 6146x 14293 в текстовом и шестнадцатеричном редакторе:
Вы можете видеть, что файл представляет собой изображение PNG в обоих из них, это правильно,Но отмеченная часть в представлении шестнадцатеричного редактора покажет ширину и высоту изображения (в соответствии со спецификацией PNG части «IHDR» ) - 0x00001802
равно 6146 в десятичном виде, 0x000037D5
- это14293. Нет способа сделать это в текстовом редакторе.
Также обратите внимание, что даже если вы не знаете формат изображения, вам может повезти, просто предположив, что это несжатые данные (это часто работает в некоторых играхформаты графических файлов, наиболее известные «активы» Unity).Например, если вы переименуете файлы в «.raw», программа просмотра изображений IrfanView выдаст вам диалоговое окно (см. Скриншот ниже), где вы можете угадать ширину, высоту и битовую глубину изображения и посмотреть, получится ли результатвыглядит хорошо.Это требует некоторого опыта в интерпретации результата, хотя, если ширина и битовая глубина не совпадают, изображения будут выглядеть как шум, искажены или будут иметь неправильные цвета.
Это «угадывание геометрии изображения» можно улучшить / автоматизировать, попробовав разную ширину и вычислив коэффициент корреляции между двумя линиями.Инструмент raw2tiff может сделать это.Цитата с сайта:
Волшебства нет, это просто математическая статистика, поэтому в некоторых случаях она может ошибаться.Но для большинства обычных изображений метод угадывания будет работать нормально.