python 三種方式實現截圖
導讀 | 本篇文章主要講的是用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)
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2912094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 截圖實現的幾種方式Android
- 實現圖片染色效果的三種方式
- 實現圖片懶載入的三種方式
- Python網頁截圖/螢幕截圖/截長圖如何實現?Python網頁
- 使用Vue實現圖片上傳的三種方式Vue
- 三種Singleton的實現方式
- 兩種方式實現輪播圖
- Java中Elasticsearch 實現分頁方式(三種方式)JavaElasticsearch
- springAOP的三種實現方式Spring
- PHP 三種方式實現鏈式操作PHP
- js實現繼承的三種方式JS繼承
- Linux 上截圖的三種方法Linux
- js實現視訊截圖,視訊批量截圖,canvas實現JSCanvas
- Go定時器的三種實現方式Go定時器
- 單點登入的三種實現方式
- 實現 Java 平臺的三種方式(轉)Java
- canvas實現截圖功能Canvas
- Java實現多執行緒的三種方式Java執行緒
- 實現ABAP條件斷點的三種方式斷點
- 三欄式佈局的幾種實現方式
- Java中Singleton的三種實現方式解析Java
- 前端實現文字跑馬燈的三種方式前端
- 實現布隆過濾器的三種方式過濾器
- php 遞迴函式的三種實現方式PHP遞迴函式
- 【Python】python 多執行緒兩種實現方式Python執行緒
- Python|讀、寫Excel檔案(三種模組三種方式)PythonExcel
- OPPO A7怎麼截圖?OPPO A7手機三種截圖方法教程
- 實現 ABAP 條件斷點的三種方式分享斷點
- Javascript 中實現物件原型繼承的三種方式JavaScript物件原型繼承
- 三種方式使用純 CSS 實現星級評分CSS
- 原生JS實現影片截圖JS
- Cocos Creator 實現截圖
- android截圖功能實現Android
- C#實現截圖功能C#
- C#實現的三種方式實現模擬鍵盤按鍵C#
- 通過三個DEMO學會SignalR的三種實現方式SignalR
- 用Vue來實現圖片上傳多種方式Vue
- 徒手從零實現 uTools 系列(三)- 螢幕取色和截圖