查看源代码后,似乎无法直接访问原始位图。但是,您可以获得编码副本。
首先,获取其编码表示。
bitmap_encoded = bitmap_object.to_string()
这被编码为“b”,后跟宽度、逗号、高度、逗号和 zlib 压缩原始字节的 base64 编码。解析编码数据:
import base64
import zlib
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
first_comma = bitmap_encoded.find(',')
second_comma = bitmap_encoded.find(',', first_comma + 1)
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
width = int(bitmap_encoded[1:first_comma])
# b3840,1080,eNrsf...H1ooKAs=
# ^ ^
height = int(bitmap_encoded[first_comma+1:second_comma])
# b3840,1080,eNrsf...H1ooKAs=
# ^
bitmap_bytes = zlib.decompress(base64.b64decode(bitmap_encoded[second_comma+1:]))
当我在我的机器上测试这个时,红色和蓝色通道是向后的,所以我假设来自autopy的位图是 RGB 编码的,而不是 BMP 文件使用的典型 BGR 编码,这是 PIL 所期望的。最后,使用 PIL 加载图像:
img = PIL.Image.frombytes('RGB', (width, height), bitmap_bytes, 'raw', 'BGR', 0, 1)
要正常加载图像而不交换红色和蓝色通道,请执行以下操作:
img = PIL.Image.frombytes('RGB', (width, height), bitmap_bytes)