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