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模組簡單,但是效率有點低。
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,0,100,100]) # x,y,w,h # img.save('screenshot.png') img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)
更多Python相關技術文章,請造訪Python教學欄位進行學習!
以上是python如何進行截圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!