Python实现屏幕截图的两种方式
发布时间:2020-12-16 21:13:14 所属栏目:Python 来源:网络整理
导读:使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释。 一、Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 不跨平台 import timeimport win32gui,win32ui,win32con,win32apidef window_capture(filena
下面对两者的特点和用法进行详细解释。 一、Python调用windows API实现屏幕截图 好处是
缺点是:
import time import win32gui,win32ui,win32con,win32api def window_capture(filename): hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDC mfcDC = win32ui.CreateDCFromHandle(hwndDC) # mfcDC创建可兼容的DC saveDC = mfcDC.CreateCompatibleDC() # 创建bigmap准备保存图片 saveBitMap = win32ui.CreateBitmap() # 获取监控器信息 MoniterDev = win32api.EnumDisplayMonitors(None,None) w = MoniterDev[0][2][2] h = MoniterDev[0][2][3] # print w,h #图片大小 # 为bitmap开辟空间 saveBitMap.CreateCompatibleBitmap(mfcDC,w,h) # 高度saveDC,将截图保存到saveBitmap中 saveDC.SelectObject(saveBitMap) # 截取从左上角(0,0)长宽为(w,h)的图片 saveDC.BitBlt((0,0),(w,h),mfcDC,(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) 输出结果为0.375秒,也就是说通过windows API每次截图只需要0.0375s,真是快得一逼呀。 二、使用PIL的ImageGrab模块 import time import numpy as np from PIL import ImageGrab # 每抓取一次屏幕需要的时间约为1s,如果图像尺寸小一些效率就会高一些 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) 输出结果为4.015秒,也就是说截取一次屏幕需要半秒钟,更何况此处只截取了窗口的一部分矩形区域。所以ImageGrab模块能用是能用,就是有点慢。 三、使用Selenium截图 使用Selenium只能进行WEB程序截图 使用Selenium的各个浏览器需要制定驱动的位置,驱动下载地址参见Selenium 官网 from selenium import webdriver import time def capture(url,filename="capture.png"): browser = webdriver.Chrome(r"C:UsersweidiaoDesktopchromedriver_win32chromedriver.exe") browser.set_window_size(1200,900) browser.get(url) # Load page browser.execute_script(""" (function () { var y = 0; var step = 100; window.scroll(0,0); function f() { if (y < document.body.scrollHeight) { y += step; window.scroll(0,y); setTimeout(f,50); } else { window.scroll(0,0); document.title += "scroll-done"; } } setTimeout(f,1000); })(); """) for i in range(30): if "scroll-done" in browser.title: break time.sleep(1) beg = time.time() for i in range(10): browser.save_screenshot(filename) end = time.time() print(end - beg) browser.close() capture("http://www.aspzz.cn") 打印时间为3.033s,速度介于windows API和PIL ImageGrab模块之间。 ps:下面看下python基础===python实现截图 python实现全屏截图: from PIL import ImageGrab im = ImageGrab.grab() im.save('F:12.png') 总结 以上所述是小编给大家介绍的Python实现屏幕截图的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |