能否使用pyautogui截取包含鼠标光标且无需后期编辑的截图
pyautogui截图捕获鼠标光标的解决方案
首先明确:pyautogui 官方没有提供直接开启截图包含光标指针的默认配置项,自带的pyautogui.screenshot()方法本身就不会捕获系统光标,无法通过修改默认参数实现无需额外编辑直接输出带光标的截图。
你可以选择以下两种适配高频截图需求的实现方案:
方案1:结合pyautogui光标位置手动叠加光标(无额外第三方依赖,性能损失极小)
你可以先获取当前鼠标的实时坐标,再在截图对应位置叠加预设的光标透明图,完全适配你现有每秒多次截图的逻辑,修改后代码示例:
import time import pyautogui from PIL import Image # 提前准备好和系统光标样式一致的PNG透明图,尺寸建议24*24/32*32,放在脚本同目录 CURSOR_IMG = Image.open("cursor.png").convert("RGBA") def takeScreenshot(count): myScreenshot = pyautogui.screenshot().convert("RGBA") # 获取当前鼠标坐标 mouse_x, mouse_y = pyautogui.position() # 把光标叠加到截图对应位置 myScreenshot.paste(CURSOR_IMG, (mouse_x, mouse_y), mask=CURSOR_IMG) # 转RGB格式保存 myScreenshot.convert("RGB").save(r'imgs\screenshot_'+str(count)+'.png') time.sleep(0.2) takeScreenshot(count+1) takeScreenshot(0)
该方案的截图延迟和你原有代码几乎一致,完全满足高频截图需求。
方案2:换用mss库实现原生带光标截图(自动匹配系统实时光标样式)
如果需要捕获系统动态变化的光标(比如输入时的I形光标、加载时的转圈光标),可以换用mss库,它原生支持捕获光标,无需提前准备光标素材:
- 先安装依赖:
pip install mss - 代码修改为:
import time import mss import mss.tools def takeScreenshot(count): with mss.mss(with_cursor=True) as sct: # 捕获全屏 monitor = sct.monitors[0] sct_img = sct.grab(monitor) # 保存截图 mss.tools.to_png(sct_img.rgb, sct_img.size, output=r'imgs\screenshot_'+str(count)+'.png') time.sleep(0.2) takeScreenshot(count+1) takeScreenshot(0)
只要开启with_cursor=True参数即可原生输出带光标的截图,性能足够支持每秒5次以上的截图需求。
内容的提问来源于stack exchange,提问作者Itamar Shubin
相关产品推荐
相关产品推荐

