有没有一种方法可以推断出一个文件是什么图像格式,而不需要读取整个文件?

12

有没有一种好的方法可以查看图像的格式,而不必将整个文件读入内存中?

显然,这会因格式而异(我特别关注TIFF文件),但是有什么有用的程序可以确定文件是何种图像格式,而无需完全读取文件内容吗?

奖励问题:如果图像是一个Base64编码的字符串,有没有可靠的方法在解码之前推断出它的格式?

4个回答

19

大多数图像文件格式在开头都有独特的字节。Unix file 命令会查看文件开头来确定它包含的数据类型。请参阅维基百科上关于文件中的魔法数字magicdb.org


2
除了Targa在结尾处有魔数以外,还有一些RAW格式与TIFF完全无法区分,只是它们不能解码(或反之亦然)。 - plinth

5
当然可以。就像其他人提到的那样,大多数图像都以某种形式的“Magic”开头,这将始终转换为某种Base64数据。以下是一些例子:
位图将以Qk3开头。
JPEG将以/9j/开头。
GIF将以R0l开头(第二个字符是零)。
等等。不难将不同的图像类型和它们所编码的内容联系起来。只需小心,因为有些图像具有多个Magic部分,因此您需要在B64“翻译代码”中考虑它们。

1

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

0x00000000: 4949 2a00 0800 0000
如果您想了解这些字节代表什么,可以在此处获取有关TIFF文件格式的更多信息。


2
哎呀,“something like”很危险。TIFF文件有两种有效的头部格式:49 49 2a 00或4d 4d 00 2a。49 49格式使用英特尔字节顺序(小端),在文件的大部分区域都是如此;4d 4d则使用摩托罗拉字节顺序(大端),这意味着2a和00与英特尔相反。 - plinth

0

TIFF文件以II或MM开头(Intel字节顺序或Motorolla)。
TIFF 6规范可以在这里下载,而且不难理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接