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
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 とタイトルを出力します。タイトルを使用してスクリーンショットを撮ることができます。
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.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 関連の技術記事をさらに詳しく知りたい場合は、Python チュートリアル 列にアクセスして学習してください。
以上がPythonでスクリーンショットを撮る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。