【问题标题】:Is there a way to infer what image format a file is, without reading the entire file?有没有办法在不读取整个文件的情况下推断文件是什么图像格式?
【发布时间】:2010-09-08 08:09:37
【问题描述】:

有没有一种无需将整个文件读入内存即可查看图像格式的好方法?

显然,这会因格式而异(我对 TIFF 文件特别感兴趣),但哪种程序有助于确定文件的图像格式而无需通读整个文件?

奖励:如果图像是 Base64 编码的字符串怎么办?在解码之前有什么可靠的推断方法吗?

【问题讨论】:

    标签: image tiff


    【解决方案1】:

    当然有。就像其他人提到的那样,大多数图像都以某种“魔术”开头,它总是会转换为某种 Base64 数据。以下是几个例子:

    位图将以Qk3开头

    Jpeg 将以 /9j/ 开头

    GIF 将以 R0l 开头(第二个字符是零)。

    等等。获取不同的图像类型并找出它们编码的内容并不难。请小心,因为有些魔法不止一种,所以您需要在您的 B64“翻译代码”中说明它们。

    【讨论】:

      【解决方案2】:

      TIFF 将以 II 或 MM(英特尔字节排序或摩托罗拉)开头。
      TIFF 6 规范可以在here 下载,并且不难理解

      【讨论】:

        【解决方案3】:

        在 *nix 命令行上的 file 或读取文件的初始字节。大多数文件在前几个字节中都有一个唯一的标题。例如,TIFF 的标​​头看起来像这样:

        0x00000000: 4949 2a00 0800 0000
        有关 TIFF 文件格式的更多信息,特别是如果您想知道这些字节代表什么,请转到 here

        【讨论】:

        • 说“类似的东西”很危险。有两个有效的 tiff 标头:49 49 2a 00 或 4d 4d 00 2a。 49 49 格式在大部分文件中使用英特尔字节排序(小端),4d 4d 使用摩托罗拉字节(大端),这意味着 2a 和 00 与英特尔相反。
        【解决方案4】:

        大多数图像文件格式的开头都有唯一的字节。 unix file 命令查看文件的开头以查看它包含的数据类型。请参阅有关 Magic numbers in filesmagicdb.org 的维基百科文章。

        【讨论】:

        • 除了结尾有幻数的 Targa,以及一些 RAW 风格,它们与 TIFF 完全没有区别,只是它们不解码(反之亦然)。
        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 2010-09-11
        相关资源
        最近更新 更多