首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python屏幕的一小部分快速屏幕截图

Python屏幕的一小部分快速屏幕截图
EN

Stack Overflow用户
提问于 2022-05-27 20:51:00
回答 1查看 862关注 0票数 0

我目前正在做一个项目,在这个项目中,我需要从屏幕的特定区域拍摄一个30x40像素的屏幕快照。这并不难做到,因为有很多方法可以做到这一点。

我的问题是,我需要采取大约10至15屏幕截图/秒,我提到的大小。当我查看一些捕捉屏幕的方法时,我已经看到,当您为更小的选择提供参数时,就会涉及到裁剪。因此,一个完整的屏幕截图正在进行,然后该方法将其种植到给定的大小。如果我只使用30x40图像,这似乎是浪费资源,特别是考虑到我将拍摄数千张截图。

因此,我的问题是:是否有一种方法只捕获屏幕的一部分而不捕获整个屏幕,从大屏幕截图中删除所需的部分?我目前正在使用以下命令:

im = pyautogui.screenshot(region=(0,0, 30, 40))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-28 00:57:40

Python模块( https://github.com/BoboTiG/python-msshttps://python-mss.readthedocs.io/examples.html )是纯Python中使用ctype( mss代表多个屏幕截图)的超高速跨平台多屏幕截图模块,是您所要寻找的。截图的速度足够快,可以从视频中捕获帧,并且屏幕上的部分越小,抓取的速度就越快(因此显然不需要剪切)。看看这个。到目前为止,mss.mss().grab()的性能远远优于PIL.ImageGrab.grab()。下面的代码示例演示如何获取屏幕截图像素的数据(允许检测更改):

代码语言:javascript
运行
复制
import mss
from time import perf_counter as T
left  = 0
right = 2
top   = 0
btm   = 2 

with mss.mss() as sct:
    # parameter for sct.grab() can be: 
    monitor = sct.monitors[1]         # entire screen
    bbox    = (left, top, right, btm) # screen part to capture

    sT=T()
    sct_im = sct.grab(bbox) # type: <class 'mss.screenshot.ScreenShot'>
    eT=T();print(" >", eT-sT) #  > 0.0003100260073551908

    print(len(sct_im.raw), sct_im.raw) 
    # 16 bytearray(b'-12\xff\x02DU\xff-12\xff"S_\xff')
    
    print(len(sct_im.rgb), sct_im.rgb) 
    # 12 b'21-UD\x0221-_S"'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72410958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档