對Python獲取螢幕截圖的4種方法詳解
阿新 • • 發佈:2020-01-09
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。
PyQt
PyQt比呼叫windows API簡單很多,而且有windows API的很多優勢,比如速度快,可以指定獲取的視窗,即使視窗被遮擋。需注意的是,視窗最小化時無法獲取截圖。
首先需要獲取視窗的控制代碼。
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就可以進行截圖了。
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稍慢一點,但也很快了。
import pyautogui import cv2 img = pyautogui.screenshot(region=[0,100,100]) # x,y,w,h # img.save('screenshot.png') img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)
以上這篇對Python獲取螢幕截圖的4種方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。