使用 memoryview 和 struct 查看一个 GIF 图像的首部
>>> import struct >>> fmt = '<3s3sHH' # ➊ >>> with open('filter.gif', 'rb') as fp: ... img = memoryview(fp.read()) # ➋ ... >>> header = img[:10] # ➌ >>> bytes(header) # ➍ b'GIF89a+\x02\xe6\x00' >>> struct.unpack(fmt, header) # ➎ (b'GIF', b'89a', 555, 230) >>> del header # ➏ >>> del img
- 结构体的格式:< 是小字节序,3s3s 是两个 3 字节序列,HH 是两个16 位二进制整数
- 使用内存中的文件内容创建一个memoryview对象
- 然后使用它的切片在创建一个memoryview对象,这里不会复制字节序列
- 转换成字节序列,这里只是为了显示,这里复制了是个字节
- 拆包memoryview对象,得到一个元祖,包含类型、版本、宽度和高度
- 删除引用,释放memoryview实例所占用的内存