所有图像文件格式(或以下格式)中的此行为是否相同
一般的)?
对于大多数人来说,是的。有些专有格式(例如游戏)可能具有非常短的元数据或没有元数据。此外,元数据可能位于另一个文件中(例如动画与 XML 元数据)。
仅使用此可以识别图像文件(无扩展名)
数据?
是的。事实上,如果图像文件的扩展名不正确,大多数图像查看器都会向您发出警告,并询问您是否应该修复它。
在 Unix 系统上,有一个file command https://en.wikipedia.org/wiki/File_(command)根据文件的元数据识别文件。有一个更好的专门用于图像的工具,称为识别(ImageMagick 的一部分) https://imagemagick.org/script/identify.php返回有关分辨率、位深度等的更详细信息。
是否有关于如何分解此元数据的信息?经过
我的意思是,元数据中哪个位置的数据有什么意义?
有一些关于(图像)文件格式的书籍,对于大多数格式,此信息可在官方规范中找到(例如RFC 2083 https://www.rfc-editor.org/rfc/rfc2083对于巴布亚新几内亚)。它们列出了所有(可选)文件内容,描述了压缩以及查看器/解码器/编码器可以/必须/应该对数据执行的操作。一个好的起点可能是维基百科图像文件格式列表 https://en.wikipedia.org/wiki/Image_file_formats.
请注意,根据您提供的示例,我认为您使用文本编辑器打开文件,这不是该任务的理想工具。最好使用十六进制编辑器 https://en.wikipedia.org/wiki/Hex_editor为了这。默认情况下,文本编辑器不会显示大多数字节(例如 255)并解释其他字节(例如制表符或换行符)。它们可能足以看到像“BM”和“PNG”这样的魔术文本字符串,但是使用十六进制编辑器,您可以看到这些文本部分及其数字表示 - 例如允许您提取图像的宽度和高度。为此,需要一些工具来转换十六进制 https://en.wikipedia.org/wiki/Hexadecimal将值转为十进制很有用,大多数计算器都可以做到这一点。
作为示例,让我们在文本编辑器和十六进制编辑器中查看分辨率为 6146 x 14293 的 PNG 文件的开头:
您可以看到文件都是 PNG 图像,这是正确的。但十六进制编辑器视图中标记的部分将显示图像的宽度和高度(与“IHDR”部分的 PNG 块规范 https://www.rfc-editor.org/rfc/rfc2083#section-4) - 0x00001802
十进制为 6146,0x000037D5
是 14293。在文本编辑器中无法执行此操作。
另请注意,即使您不知道图像格式,您也可能会幸运地猜测它是未压缩的数据(这通常适用于某些游戏图像文件格式,最著名的是 Unity 的“资产”)。例如。如果将文件重命名为“.raw”,图像查看器伊凡维尤 https://www.irfanview.net/将会出现一个对话框(请参见下面的屏幕截图),您可以在其中猜测图像的宽度、高度和位深度,并查看结果是否良好。不过,这需要一些解释结果的经验,如果宽度和位深度不匹配,图像将看起来像噪声、扭曲或颜色错误。
这种“图像几何猜测”可以通过尝试不同的宽度并计算两条线之间的相关系数来改进/自动化。工具raw2tiff http://www.libtiff.org/man/raw2tiff.1.html可以做到这一点。引用自该网站:
没有什么魔法,只是一个数理统计,所以可以
在某些情况下是错误的。但对于大多数普通图像,猜测方法会
工作正常。