最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

其中用到了兩個第三方模塊,分別是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)  # 將該窗口最大化

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

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)建字典保存窗口的句柄與名稱映射關(guān)系


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)

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

相關(guān)文章

  • python中的列表和元組實例詳解

    python中的列表和元組實例詳解

    在Python中序列是最基本的數(shù)據(jù)結(jié)構(gòu),它是一塊用于存放多個值得連續(xù)內(nèi)存空間,Python中內(nèi)置了5個常用的序列結(jié)構(gòu),分別是列表、元組、集合、字典和字符串,本文將詳細講解python中的列表和元組,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python 矩陣轉(zhuǎn)置的幾種方法小結(jié)

    Python 矩陣轉(zhuǎn)置的幾種方法小結(jié)

    今天小編就為大家分享一篇Python 矩陣轉(zhuǎn)置的幾種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python3中的類繼承你真的了解嗎

    python3中的類繼承你真的了解嗎

    這篇文章主要為大家詳細介紹了python3中的類繼承,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python遞歸算法(無限遞歸,正常遞歸,階乘)

    python遞歸算法(無限遞歸,正常遞歸,階乘)

    本文主要介紹了python遞歸算法,包含無限遞歸,正常遞歸,階乘等,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Python實現(xiàn)快速傅里葉變換的方法(FFT)

    Python實現(xiàn)快速傅里葉變換的方法(FFT)

    這篇文章主要介紹了Python實現(xiàn)快速傅里葉變換的方法(FFT),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • python解決字符串倒序輸出的問題

    python解決字符串倒序輸出的問題

    今天小編就為大家分享一篇python解決字符串倒序輸出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python游戲推箱子的實現(xiàn)

    Python游戲推箱子的實現(xiàn)

    這篇文章主要介紹了Python游戲推箱子的實現(xiàn),推箱子游戲是一款可玩性極高的策略解謎手游,游戲中玩家將扮演一名可愛Q萌的角色,下面我們就看看看具體的實現(xiàn)過程吧,需要的小伙伴可以參考一下
    2021-12-12
  • Python使用Matplotlib繪制散點趨勢線的代碼詳解

    Python使用Matplotlib繪制散點趨勢線的代碼詳解

    Matplotlib是一個用于數(shù)據(jù)可視化的強大Python庫,其基本功能之一是創(chuàng)建帶有趨勢線的散點圖,散點圖對于可視化變量之間的關(guān)系非常有用,本文將指導您使用Matplotlib繪制散點趨勢線的過程,涵蓋線性和多項式趨勢線,需要的朋友可以參考下
    2025-01-01
  • 基于Python生成個性二維碼過程詳解

    基于Python生成個性二維碼過程詳解

    這篇文章主要介紹了基于Python生成個性二維碼過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Python臨時文件創(chuàng)建之tempfile模塊介紹

    Python臨時文件創(chuàng)建之tempfile模塊介紹

    這篇文章主要介紹了Python臨時文件創(chuàng)建之tempfile模塊,Python的tempfile模塊是用來創(chuàng)建臨時文件或者文件夾的跨平臺工具,下面關(guān)于模塊簡單介紹需要的小伙伴可以參考一下
    2022-03-03

最新評論

惠州市| 兴化市| 静宁县| 申扎县| 乐东| 长汀县| 武城县| 莒南县| 东海县| 洮南市| 马边| 凤山县| 佛坪县| 孟津县| 钦州市| 砀山县| 麟游县| 孟州市| 无极县| 马公市| 呼图壁县| 盘山县| 高阳县| 陆丰市| 体育| 凯里市| 阳泉市| 儋州市| 上杭县| 大关县| 客服| 安庆市| 沾益县| 新宾| 衡南县| 云南省| 鹤山市| 望谟县| 吴旗县| 曲麻莱县| 郧西县|