获取bmp图像的文件大小

时间:2018-04-10 12:29:21

标签: python bitmap byte filesize

我有一个位图图像并使用this page我试图读取文件大小。

如果链接断开:

  

FileSize | 4个字节|文件大小(以字节为单位)

这是我要读取的位图BM\xe6\x04\x00\x00\x00\x00\x00\x006的一部分,据我所知,文件大小介于第3和第7个字节之间。所以\xe6\x04\x00\x00

我删除了所有\x00因为它们是空值而且没有告诉我有关文件大小的任何信息,所以我使用了:

raw = '\xe6\x04\x00\x00'
character_list = [raw[b:b+1] for b in range(0, len(raw))]
non_empty = [list_ for list_ in character_list if list_ != b'\x00']

这让我回复:[b'\xe6', b'\x04']

现在我使用以下命令获取列表中的所有值:

size = ''
for byte in non_empty: 
    size += str(ord(byte))
    print(size)

以下是转换结果:

\xe6> 230

\x04> 4

这会返回2304(因为'230' + '4'2304),而我的位图图片大小为1,254字节,磁盘上为4,096字节。显然这不是图像尺寸。我哪里出错?

作为旁注。如果我拍摄另一个大小为90字节的图像并使用Z\x00\x00\x00运行相同的过程,它会按照我的预期返回90。 (ord('Z')返回90)。

1 个答案:

答案 0 :(得分:2)

从戳到它看起来像位图中的大小的字节顺序是小端(https://en.wikipedia.org/wiki/Endianness#Little-endian)。

有一个int的内置方法可以将字节转换为整数。 https://docs.python.org/3/library/stdtypes.html#int.from_bytes

例如:

raw = b'\xe6\x04\x00\x00'
size = int.from_bytes(raw, byteorder='little')
print(size)