PIL ImageGrab返回24位图像而不是32位

时间:2019-01-29 13:46:38

标签: python python-imaging-library

我具有以下功能:

def take_screenshot(x1, y1, x2, y2):
    img = ImageGrab.grab(bbox=(x1, y1, x2, y2)) 
    return img

当我使用以下方法保存图像时:

img = take_screenshot(10, 10, 200, 200)
img.save("test.png")

我认为Pill使用32位作为所有内容的默认设置。我不明白如何将其保存为24位而不是32位。

1 个答案:

答案 0 :(得分:2)

来自documentation PIL.ImageGrab.grab(bbox=None)拍摄屏幕快照。边框内的像素在Windows上以“ RGB”图像或在macOS上以“ RGBA”的形式返回。

您还可以查看源代码here

在Windows上,它严格uses RGB(24位) 大小,数据=抓手()

im = Image.frombytes(
        "RGB", size, data,
        # RGB, 32-bit line padding, origin lower left corner
        "raw", "BGR", (size[0]*3 + 3) & -4, -1
        )

如果要求具有32位图像,则可以使用将该图像转换为RGBA(32位)

img = take_screenshot(10, 10, 200, 200)
img = img.convert("RGBA")
img.save("test.png")