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

您所在的位置:网站首页 pycharm安装cv2的方法 Python获取屏幕截图的4种方法

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

2023-07-23 14:34| 来源: 网络整理| 查看: 265

本文转载自Python获取屏幕截图的4种方法-凌的博客 (jiuaitu.com)

 

 

Python获取电脑截图有多种方式,具体如下:

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)

 

使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需0.5s。

windows API

调用windows API,速度快但是使用较复杂,有更好用的PyQt。

  python import time import win32gui, win32ui, win32con, win32api def window_capture(filename):     hwnd = 0  # 窗口的编号,0号表示当前活跃窗口     # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)     hwndDC = win32gui.GetWindowDC(hwnd)     # 根据窗口的DC获取mfcDC     mfcDC = win32ui.CreateDCFromHandle(hwndDC)     # mfcDC创建可兼容的DC     saveDC = mfcDC.CreateCompatibleDC()     # 创建bigmap准备保存图片     saveBitMap = win32ui.CreateBitmap()     # 获取监控器信息     MoniterDev = win32api.EnumDisplayMonitors(None, None)     w = MoniterDev[0][2][2]     h = MoniterDev[0][2][3]     # print w,h   #图片大小     # 为bitmap开辟空间     saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)     # 高度saveDC,将截图保存到saveBitmap中     saveDC.SelectObject(saveBitMap)     # 截取从左上角(0,0)长宽为(w,h)的图片     saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)     saveBitMap.SaveBitmapFile(saveDC, filename) beg = time.time() for i in range(10):     window_capture("haha.jpg") end = time.time() print(end - beg)

 

PyQt

PyQt比调用windows API简单很多,而且有windows API的很多优势,比如速度快,可以指定获取的窗口,即使窗口被遮挡。需注意的是,窗口最小化时无法获取截图。

首先需要获取窗口的句柄。

  python 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就可以进行截图了。

  python 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稍慢一点,但也很快了。

  python 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)

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3