python 三種方式實現截圖

大雄45發表於2022-08-26
導讀 本篇文章主要講的是用Python實現螢幕截圖詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
一、方法一

PIL中的ImageGrab模組

使用PIL中的ImageGrab模組簡單,但是效率有點低

PIL是Python Imaging Library,它為python直譯器提供影像編輯函式能力。 ImageGrab模組可用於將螢幕或剪貼簿的內容複製到PIL影像儲存器中。

PIL.ImageGrab.grab()方法拍攝螢幕快照。邊框內的畫素在Windows上以“RGB”影像的形式返回,在macOS上以“RGBA”的形式返回。

如果省略了邊界框,則會複製整個螢幕。

import numpy as np
from PIL import ImageGrab, Image
import cv2
img = ImageGrab.grab(bbox=(0, 0, 1920, 1080)) # bbox 定義左、上、右和下畫素的4元組
print(img.size[1], img.size[0])
img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)
print(img)
cv2.imwrite('screenshot1.jpg', img)
# img = Image.fromarray(img)
# img.save('screenshot1.jpg')
二、方法二

PyQt比呼叫windows API簡單很多,而且有windows API的很多優勢,比如速度快,可以指定獲取的視窗,即使視窗被遮擋。

需注意的是,視窗最小化時無法獲取截圖。

首先需要獲取視窗的控制程式碼。

import win32gui
from PyQt5.QtWidgets import QApplication
import sys
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)
# print(hwnd_title.items())
for h, t in hwnd_title.items():
if t != "":
print(h, t)
# 程式會列印視窗的hwnd和title,有了title就可以進行截圖了。
hwnd = win32gui.FindWindow(None, 'C:\Windows\system32\cmd.exe')
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()
img.save("screenshot2.jpg")
三、方法三

pyautogui是比較簡單的,但是不能指定獲取程式的視窗,因此視窗也不能遮擋,不過可以指定截圖的位置

import pyautogui
import cv2 # ~gohlke/pythonlibs/#opencv
import numpy as nppy
from PIL import Image
img = pyautogui.screenshot(region=[0, 0, 1920, 1080]) # x,y,w,h
# img = Image.fromarray(np.uint8(img))
# img.save('screenshot3.png')
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) # cvtColor用於在影像中不同的色彩空間進行轉換,用於後續處理。
cv2.imwrite('screenshot3.jpg', img)

python 三種方式實現截圖python 三種方式實現截圖

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2912094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章