首頁 >後端開發 >Python教學 >python如何進行截圖

python如何進行截圖

尚
原創
2019-06-29 15:05:318010瀏覽

python如何進行截圖

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn