Python获取屏幕截图的4种方法详解

沈亦白
沈亦白
发布时间:2026-10-14 | 3人浏览过
原创

本文详细解析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种方法的详解内容分享完毕,希望能对读者有所帮助,也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表