获取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)
我有一个位图图像并使用 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)