5

python 的哪些成像模块可以让您截取特定尺寸的屏幕截图(而不是整个屏幕)?我尝试过 PIL,但似乎无法让 ImageGrab.grab() 选择一个小矩形,我尝试过 PyGame,但我无法让它在主显示面板之外进行屏幕截图

4

5 回答 5

11

您可以使用pyscreenshot模块。
pyscreenshot模块可用于将屏幕内容复制到PIL图像存储器或文件中。您可以使用pip.

$ sudo pip install pyscreenshot

用法:

import pyscreenshot as ImageGrab
# fullscreen
im=ImageGrab.grab()
im.show()

# part of the screen
im=ImageGrab.grab(bbox=(10,10,500,500))
im.show()

# to file
ImageGrab.grab_to_file('im.png')
于 2013-10-31T02:28:50.430 回答
5

我试过 PIL,但似乎无法让 ImageGrab.grab() 选择一个小矩形

你尝试了什么?

正如文档ImageGrab明确指出的那样,该函数有一个bbox参数,并且:

边界框内的像素作为“RGB”图像返回。如果省略边界框,则复制整个屏幕。

因此,如果您不通过bbox.

请注意,虽然我链接到 Pillow 文档(你应该使用 Pillow),但老式 PIL 的文档也说了同样的话

边界框参数可用于仅复制屏幕的一部分。

因此,除非您使用的是非常非常旧的 PIL 版本(在 1.1.3 之前,我认为它已经过时了十多年),否则它具有此功能。

于 2013-10-31T02:16:43.143 回答
3

1) 使用 pyscreenshot,ImageGrab 可以工作,但只能在 Windows 上使用

2)抓取图像并将其装箱,然后保存该图像

3) 不要使用 ImageGrab.grab_to_file,它会保存完整大小的图像

4) 如果您只想保存屏幕截图,则不需要使用 im.show 显示图像

import pyscreenshot as ImageGrab

im=ImageGrab.grab(bbox=(10,10,500,500))

im.save('im.png')
于 2016-02-26T20:32:40.533 回答
2

您可以使用Python MSS

从文档到仅捕获屏幕的一部分:

import mss
import mss.tools


with mss.mss() as sct:
    # The screen part to capture
    monitor = {"top": 160, "left": 160, "width": 160, "height": 135}
    output = "sct-{top}x{left}_{width}x{height}.png".format(**monitor)

    # Grab the data
    sct_img = sct.grab(monitor)

    # Save to the picture file
    mss.tools.to_png(sct_img.rgb, sct_img.size, output=output)
    print(output)
于 2019-02-25T10:59:34.397 回答
1

您可以在 linux 或 windows 平台上使用 pyscreenshot。我正在使用 Ubuntu,它对我有用。如果应用子进程,您可以强制将其设置为 false 与 mss 一起提供最佳性能。

import pyscreenshot as ImageGrab
import time
t1 = time.time()
imgScreen = ImageGrab.grab(backend="mss", childprocess=False)
img = imgScreen.resize((640,480))
img.save("screen.png")
t2 = time.time()
print("The passing time",(t2-t1))

于 2020-07-17T03:47:24.357 回答