python實(shí)現(xiàn)截圖功能的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元宿松做網(wǎng)站,已為上家服務(wù),為宿松各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

這篇文章主要介紹python實(shí)現(xiàn)截圖功能的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

在python中,可以通過(guò)調(diào)用windows API或者使用PIL中的ImageGrab模塊來(lái)實(shí)現(xiàn)截圖功能。方法是:1、利用BitBlt設(shè)置截取圖片的尺寸;2、利用saveBitMap對(duì)截取的圖像進(jìn)行保存。

一、Python調(diào)用windows API實(shí)現(xiàn)屏幕截圖

好處是

  • 靈活

  • 速度快

缺點(diǎn)是:

  • 寫(xiě)法繁瑣

  • 不跨平臺(tái)

import time
import win32gui, win32ui, win32con, win32api
def window_capture(filename):
  hwnd = 0 # 窗口的編號(hào),0號(hào)表示當(dāng)前活躍窗口
  # 根據(jù)窗口句柄獲取窗口的設(shè)備上下文DC(Divice Context)
  hwndDC = win32gui.GetWindowDC(hwnd)
  # 根據(jù)窗口的DC獲取mfcDC
  mfcDC = win32ui.CreateDCFromHandle(hwndDC)
  # mfcDC創(chuàng)建可兼容的DC
  saveDC = mfcDC.CreateCompatibleDC()
  # 創(chuàng)建bigmap準(zhǔn)備保存圖片
  saveBitMap = win32ui.CreateBitmap()
  # 獲取監(jiān)控器信息
  MoniterDev = win32api.EnumDisplayMonitors(None, None)
  w = MoniterDev[0][2][2]
  h = MoniterDev[0][2][3]
  # print w,h   #圖片大小
  # 為bitmap開(kāi)辟空間
  saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
  # 高度saveDC,將截圖保存到saveBitmap中
  saveDC.SelectObject(saveBitMap)
  # 截取從左上角(0,0)長(zhǎng)寬為(w,h)的圖片
  saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
  saveBitMap.SaveBitmapFile(saveDC, filename)
beg = time.time()
for i in range(10):
  window_capture("haha.jpg")
end = time.time()
print(end - beg)

輸出結(jié)果為0.375秒,也就是說(shuō)通過(guò)windows API每次截圖只需要0.0375s,真是快呀。

二、使用PIL的ImageGrab模塊

import time
import numpy as np
from PIL import ImageGrab
# 每抓取一次屏幕需要的時(shí)間約為1s,如果圖像尺寸小一些效率就會(huì)高一些
beg = time.time()
debug = False
for i in range(10):
  img = ImageGrab.grab(bbox=(250, 161, 1141, 610))
  img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)
end = time.time()
print(end - beg)

輸出結(jié)果為4.015秒,也就是說(shuō)截取一次屏幕需要半秒鐘,更何況此處只截取了窗口的一部分矩形區(qū)域。所以ImageGrab模塊能用是能用,就是有點(diǎn)慢。

以上是python實(shí)現(xiàn)截圖功能的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

網(wǎng)站標(biāo)題:python實(shí)現(xiàn)截圖功能的方法-創(chuàng)新互聯(lián)
路徑分享:http://bm7419.com/article12/hsedc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站設(shè)計(jì)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)