PIL ImageGrab возвращает 24-битное изображение вместо 32-битного - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующая функция:

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 голосов
/ 29 января 2019

Из документации PIL.ImageGrab.grab(bbox=None) Сделайте снимок экрана.Пиксели внутри ограничительной рамки возвращаются в виде «RGB» в Windows или «RGBA» в macOS .

Вы также можете посмотреть исходный код здесь

В Windows он строго использует RGB (24-битный) размер, data = grabber ()

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")
...