欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)超快窗口截圖功能詳解

 更新時間:2022年05月16日 08:17:17   作者:Python?集中營  
這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)超快窗口截圖功能,可以自動獲取當前活動窗口并展示截圖,感興趣的可以了解一下

實現(xiàn)思路是先獲取到當前最上面活動的窗口信息,然后提取該窗口的名稱信息。

之后獲取窗口的坐標信息,即左上角的開始坐標及右下角的結束坐標。最后直接截圖并將截圖的圖片進行展示。

其中用到了兩個第三方模塊,分別是win32gui和Pillow,安裝命令如下:

pip install Pillow
pip install win32gui

將其中使用到的三個非標準庫導入進來。

from win32gui import *  # 操作windows窗口
from PIL import ImageGrab  # 操作圖像
import win32con  # 系統(tǒng)操作

初始化一個set列表存放所有活動窗口名稱,使用set類型的目的是保證所有活動窗口名稱的唯一性。

names = set()

編寫get_window_title函數(shù),獲取當前的所有活動窗口對象。

def get_window_title(window, nouse):
    '''
    獲取窗口標題函數(shù)
    :param window: 窗口對象
    :param nouse:
    :return:
    '''

    if IsWindow(window) and IsWindowEnabled(window) and IsWindowVisible(window):

        names.add(GetWindowText(window))

EnumWindows(get_window_title, 0)

list_ = [name for name in names if name]

for n in list_:

    print('活動窗口: ', n)

輸入自己想要截圖的窗口名稱作為當前窗口,然后提取到需要截圖的窗口對象。

name = input('請輸入需要截圖的活動窗口名稱: \n')

window = FindWindow(0, name)  # 根據(jù)窗口名稱獲取窗口對象

ShowWindow(window, win32con.SW_MAXIMIZE)  # 將該窗口最大化

獲取該窗口的坐標信息,開始坐標信息和結束坐標信息。

x_start, y_start, x_end, y_end = GetWindowRect(window)

# 坐標信息
box = (x_start, y_start, x_end, y_end)

調(diào)用ImageGrab.grab()函數(shù)實現(xiàn)對窗口的截圖操作。

image = ImageGrab.grab(box)

在完成截圖之后展示一下截圖的效果,如果不需要展示的話就不需要添加這行代碼了。

image.show()  # 圖片展示,如果截完圖需要展示則放開此項

最后一步,將截圖好的圖片保存下來。

image.save('target.png')

print('截圖已經(jīng)保存完成!')

上面整個的python截圖操作就實現(xiàn)了

補充

當然Python中還有更多方法實現(xiàn)窗口截圖

方法一:使用pyautogui方法實現(xiàn)截屏

import pyautogui
import cv2
import numpy as np

img = pyautogui.screenshot(region=[300,50, 200, 100])  # 分別代表:左上角坐標,寬高
#對獲取的圖片轉(zhuǎn)換成二維矩陣形式,后再將RGB轉(zhuǎn)成BGR
#因為imshow,默認通道順序是BGR,而pyautogui默認是RGB所以要轉(zhuǎn)換一下,不然會有點問題
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

cv2.imshow("截屏",img)
cv2.waitKey(0)

優(yōu)點:

  • 方便快捷,容易寫核心部分就一行.
  • 速度快0.04s左右,基本可以達到實時截屏的效果。
  • 可以自由確定截屏區(qū)域

缺點:

但是不能指定獲取程序的窗口,因此窗口也不能遮擋。

方法二:使用PyQt方法實現(xiàn)截屏

a.獲取窗口的句柄,也就是目標窗口名title

import win32gui

hwnd_title = dict() #創(chuàng)建字典保存窗口的句柄與名稱映射關系


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!= "":
        print(h, t)

注:程序會打印所有窗口的hwnd和title,有了title就可以進行截圖了。

b.使用PyQt5截屏核心程序

from PyQt5.QtWidgets import QApplication
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")

注:如果想截取特定的窗口,只需要將C:/Windows/system32/cmd.exe換成上一個程序中打印的title,并且保證那個窗口沒有被你最小化即可

優(yōu)點:

方便快捷,容易寫核心部分就一行.

速度快0.04s左右,基本可以達到實時截屏的效果。

可以自由確定要截屏的窗口

缺點:

不可以自由確定截屏區(qū)域

c.使用PyQt5截屏用Mat格式顯示的核心程序

def convertQImageToMat(incomingImage):
    '''  Converts a QImage into an opencv MAT format  '''
    # Format_RGB32 = 4,存入格式為B,G,R,A 對應 0,1,2,3
    # RGB32圖像每個像素用32比特位表示,占4個字節(jié),
    # R,G,B分量分別用8個bit表示,存儲順序為B,G,R,最后8個字節(jié)保留
    incomingImage = incomingImage.convertToFormat(4)
    width = incomingImage.width()
    height = incomingImage.height()

    ptr = incomingImage.bits()
    ptr.setsize(incomingImage.byteCount())
    arr = np.array(ptr).reshape(height, width, 4)  # Copies the data
    # arr為BGRA,4通道圖片
    return arr

from PyQt5.QtWidgets import QApplication
import win32gui
import sys
import cv2
import numpy as np
hwnd = win32gui.FindWindow(None, '劍士之魂中文版小游戲,在線玩,4399小游戲 - 360安全瀏覽器 13.1')
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(hwnd).toImage()

img=convertQImageToMat(img)#將獲取的圖像從QImage轉(zhuǎn)換為RBG格式
cv2.imshow("asd",img)      #imshow
cv2.waitKey(0)

到此這篇關于Python實現(xiàn)超快窗口截圖功能詳解的文章就介紹到這了,更多相關Python窗口截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python解決非線性規(guī)劃中經(jīng)濟調(diào)度問題

    Python解決非線性規(guī)劃中經(jīng)濟調(diào)度問題

    Scipy是Python算法庫和數(shù)學工具包,包括最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、傅里葉變換等模塊。scipy.optimize模塊中提供了多個用于非線性規(guī)劃問題的方法,適用于不同類型的問題。本文將利用起解決經(jīng)濟調(diào)度問題,感興趣的可以了解一下
    2022-05-05
  • 在IPython中執(zhí)行Python程序文件的示例

    在IPython中執(zhí)行Python程序文件的示例

    今天小編就為大家分享一篇在IPython中執(zhí)行Python程序文件的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 淺談Python之Django(四)

    淺談Python之Django(四)

    這篇文章主要介紹了Python3中的Django,小編覺得這篇文章寫的還不錯,需要的朋友們下面隨著小編來一起學習學習吧,希望能夠給你帶來幫助
    2021-10-10
  • Python面向?qū)ο缶幊讨庋b的藝術你了解嗎

    Python面向?qū)ο缶幊讨庋b的藝術你了解嗎

    這篇文章主要為大家詳細介紹了Python面向?qū)ο缶幊讨庋b的藝術,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Python利用CNN實現(xiàn)對時序數(shù)據(jù)進行分類

    Python利用CNN實現(xiàn)對時序數(shù)據(jù)進行分類

    這篇文章主要為大家詳細介紹了Python如何利用CNN實現(xiàn)對時序數(shù)據(jù)進行分類功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • python 統(tǒng)計代碼行數(shù)簡單實例

    python 統(tǒng)計代碼行數(shù)簡單實例

    這篇文章主要介紹了python 統(tǒng)計代碼行數(shù)簡單實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • 使用Python編寫一個最基礎的代碼解釋器的要點解析

    使用Python編寫一個最基礎的代碼解釋器的要點解析

    Python、Ruby等語言代碼就是在解釋器程序中一行行被解釋為機器碼同步執(zhí)行的,而如果使用Python編寫解釋器的話則可以把目標代碼解釋為Python代碼再進行解釋執(zhí)行,這里我們就來看一下使用Python編寫一個最基礎的代碼解釋器的要點解析:
    2016-07-07
  • Python正則表達式經(jīng)典入門教程

    Python正則表達式經(jīng)典入門教程

    這篇文章主要介紹了Python正則表達式,結合具體實例形式歸納總結了Python正則表達式中常用的各種函數(shù)與相關使用技巧,需要的朋友可以參考下
    2017-05-05
  • Python拋出引發(fā)異常(raise)知識點總結

    Python拋出引發(fā)異常(raise)知識點總結

    在本篇文章里小編給大家整理了關于Python拋出引發(fā)異常(raise)知識點總結內(nèi)容,有需要的朋友們可以學習參考下。
    2021-06-06
  • python標準庫ElementTree處理xml

    python標準庫ElementTree處理xml

    這篇文章主要為大家介紹了python標準庫ElementTree處理xml的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論