python实现桌面截图功能
PIL中的ImageGrab模块
1 2 3 4 5 6 | import time import numpy as np from PIL import ImageGrab img = ImageGrab.grab(bbox = ( 100 , 161 , 1141 , 610 )) img = np.array(img.getdata(), np.uint8).reshape(img.size[ 1 ], img.size[ 0 ], 3 ) |
使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需0.5s。
windows API
调用windows API,速度快但是使用较复杂,这里就不做详细介绍了,因为有更好用的PyQt。
PyQt
PyQt比调用windows API简单很多,而且有windows API的很多优势,比如速度快,可以指定获取的窗口,即使窗口被遮挡。需注意的是,窗口最小化时无法获取截图。
首先需要获取窗口的句柄。
1 2 3 4 5 6 7 8 9 10 11 | import win32gui hwnd_title = dict () def get_all_hwnd(hwnd,mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)}) win32gui.EnumWindows(get_all_hwnd, 0 ) for h,t in hwnd_title.items(): if t is not "": print (h, t) |
程序会打印窗口的hwnd和title,有了title就可以进行截图了。
1 2 3 4 5 6 7 8 9 10 | from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import * import win32gui import sys hwnd = win32gui.FindWindow( None , 'C:\Windows\system32\cmd.exe' ) app = QApplication(sys.argv) screen = QApplication.primaryScreen() img = screen.grabWindow(hwnd).toImage() img.save( "screenshot.jpg" ) |
pyautogui
pyautogui是比较简单的,但是不能指定获取程序的窗口,因此窗口也不能遮挡,不过可以指定截屏的位置,0.04s一张截图,比PyQt稍慢一点,但也很快了。
1 2 3 4 5 6 | import pyautogui import cv2 img = pyautogui.screenshot(region = [ 0 , 0 , 100 , 100 ]) # x,y,w,h # img.save('screenshot.png') img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR) |
以上这篇对Python获取屏幕截图的4种方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持谷谷点程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了