拍摄特定尺寸的屏幕截图

时间:2013-10-31 02:07:26

标签: python

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

5 个答案:

答案 0 :(得分:7)

您可以使用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')

答案 1 :(得分:3)

  

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

你尝试了什么?

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

  

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

因此,如果您没有传递bbox,则只能获得整个屏幕。

请注意,虽然我链接到枕头文档(你应该使用Pillow),老派PIL的文档say the same thing

  

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

所以,除非你使用真正的,非常旧的PIL版本(在1.1.3之前,我相信它已经过时了十多年),否则就有了这个功能。

答案 2 :(得分:2)

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')

答案 3 :(得分:1)

您可以使用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)

答案 4 :(得分:0)

您可以在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))