BMP文件大小编码

时间:2015-03-25 03:16:53

标签: python byte filesize bmp

我正在尝试了解如何在位图文件头中编码图像大小。 wikipedia page仅显示小于255字节的图像示例,因此大小以单字节编码,后跟三个0字节。

问题在于,当我测试更大的图像时,我无法将编码的字节与实际尺寸联系起来。

$ identify bmp1.bmp
bmp1.bmp BMP3 10x10 10x10+0+0 1-bit sRGB 2c 102B 0.000u 0:00.000
$ identify bmp2.bmp
bmp2.bmp BMP3 92x76 92x76+0+0 1-bit sRGB 2c 974B 0.000u 0:00.000
In [28]: [ord(c) for c in bmp1[2:6]]
Out[28]: [102, 0, 0, 0]

In [29]: len(bmp1)
Out[29]: 102

In [30]: [ord(c) for c in bmp2[2:6]]
Out[30]: [206, 3, 0, 0]

In [31]: len(bmp2)
Out[31]: 974

如您所见,第一个图像有102个字节,文件头包含102个编码的大小。但第二个图像有974个字节,文件头包含字节206和3.这是因为文件头大小不可靠,我不应该尝试从这些字节读取大小?否则,你如何从206和3计算974?

1 个答案:

答案 0 :(得分:1)

这是endianness的问题。 BMP uses little-endian encoding,因此首先读取最低有效字节:

102 =(102 * 256 0 )+(0 * 256 1 )+(0 * 256 2 )+(0 * 256 3

= 102

974 =(206 * 256 0 )+(3 * 256 1 )+(0 * 256 2 )+(0 * 256 3

= 206 +(3 * 256)