获取bmp图片的文件大小

Getting file size of bmp image

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

如果 link 中断:

FileSize | 4 bytes | File size in bytes

这是我要读取的位图的一部分 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

这个returns我2304(因为'230' + '4'2304),而我的位图图像在磁盘上的大小为1,254字节和4,096字节。显然这不是图像大小。我哪里做错了?

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

从周围来看,位图中大小的字节顺序似乎是小端 (https://en.wikipedia.org/wiki/Endianness#Little-endian)。

int 有一个 built-in 方法可以将字节转换为整数。 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)