python编程中,通过使用第三方包“imagesize”能够快速获取图像文件的尺寸。其基本原理是通过解析文件的格式,获取尺寸信息,从而避免加载所有数据到内存中去,达到快速获取图像尺寸。
一日,突然发现BMP图像获取的宽高分别为-1,-1。起初以为是图像文件有问题,但经过测试不同的BMP文件,获得的结果仍为-1。然后,调试代码发现是底层解析并未对BMP图像做出处理造成,于是查阅BMP相关资料,对底层代码进行修改,修改如下:
PS:imagesize的版本为1.2.0
# handle BMP
# 位图类别,根据不同的操作系统而不同,在Windows中,此字段的值总为‘BM’
elif size >= 24 and head.startswith(b'BM'):
try:
fhandle.seek(0)
byte = fhandle.read(32)
# 小端 < little-endian 低地址村存放低位数据,高地址存放高位数据,倒着解析
# 数据0x1756 小端存储: 56 17
width, height = struct.unpack("<LL", byte[18:26])
except struct.error:
raise ValueError("Invalid BMP file")
修改代码添加到imagesize.py的get函数中!!!
若发现修改错误之处请留言指出,谢谢!