Python获取屏幕截图的4种方法详解
本文详细解析Python中获取屏幕截图的四种常用方法:PIL的ImageGrab模块、Windows API、PyQt以及pyautogui。通过对比各方法的代码复杂度、执行速度及功能特性(如指定窗口、处理遮挡等),帮助开发者根据实际需求选择最高效的截屏方案。
Python获取屏幕截图的4种方法详解
在Python中获取电脑屏幕截图有多种实现方式,具体包括以下几种主流方法。
PIL中的ImageGrab模块
第一种方法利用PIL库中的ImageGrab模块。
第二种方法涉及调用Windows底层API。
第三种方法基于PyQt框架实现。
第四种方法使用pyautogui库。
关于PIL中的ImageGrab模块,
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)
该方法使用简单,但执行效率相对较低,单次截屏耗时约为0.5秒。
Windows API调用
第二种方案是调用Windows API,
虽然调用Windows API速度较快,但实现过程较为复杂。鉴于存在更优的替代方案如PyQt,此处不再展开详细介绍。
基于PyQt的截屏实现
第三种方案采用PyQt,
相比直接调用Windows API,PyQt的操作更为简便,同时保留了Windows API的诸多优势,例如执行速度快且支持指定获取特定窗口,即使窗口被其他界面遮挡也能正常截屏。需要注意的是,当目标窗口处于最小化状态时,无法获取截图。
使用PyQt截屏前,首先需要获取目标窗口的句柄。
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(标题),获取到标题后即可进行截图操作。
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库,
pyautogui的使用相对简单,但无法指定获取特定程序的窗口,因此要求截屏时窗口不能被遮挡。不过,它可以指定具体的截屏区域坐标,单次截屏耗时约为0.04秒,虽然比PyQt稍慢,但整体速度依然很快。
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种方法的详解内容分享完毕,希望能对读者有所帮助,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













