python截图拼接_Python实现屏幕截图有两种方式 - 小众知识
使用windows API
使用PIL中的ImageGrab模块
下面对两者的特点和用法进行详细解释。
一、Python调用windows API实现屏幕截图
好处是灵活
速度快
缺点是:写法繁琐
不跨平台
import timeimport win32gui, win32ui, win32con, win32apidef 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, 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 timeimport numpy as npfrom PIL import ImageGrab# 每抓取一次屏幕需要的时间约为1s,如果图像尺寸小一些效率就会高一些beg = time.time()
debug = Falsefor 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 webdriverimport timedef capture(url, filename="capture.png"):
browser = webdriver.Chrome(r"C:\Users\weidiao\Desktop\chromedriver_win32\chromedriver.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.cnblogs.com/weidiao")
打印时间为3.033s,速度介于windows API和PIL ImageGrab模块之间。
python截图拼接_Python实现屏幕截图有两种方式 - 小众知识相关推荐
- python动态捕捉屏幕_Python实现屏幕截图的两种方式
使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处是 灵活 速度快 缺点是: 写法繁琐 ...
- python扩展屏幕截图_Python实现屏幕截图的两种方式
Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...
- python 设置时区_python时区设置的两种方式
第一种用pytz 第二种手动加时区再转换格式 a= datetime.datetime.today() o = datetime.timedelta(hours=8) (a+o).strftime(& ...
- python启动方法_python进程开启的两种方式
一.进程 1.1.方式一 from multiprocessing import Process import time #方式一 def task(name): print(f"my na ...
- Python实现屏幕截图的两种方式
Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...
- python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- python怎么下载图片怎么保存到本地_详解Python下载图片并保存本地的两种方式
一:使用Python中的urllib类中的urlretrieve()函数,直接从网上下载资源到本地,具体代码: import os,stat import urllib.request img_url ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- python opencv 裁剪图片_Python图片裁剪的两种方式——Pillow和OpenCV
在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. OpenCV ...
最新文章
- pip更换国内镜像源
- multiple definition of
- 修改wamp的apache默认端口80为8088以及www目录
- Linux 下查看系统是32位 还是64 位的方法
- jzoj3301-[集训队互测2013]家族【并查集,暴力】
- 【渝粤教育】国家开放大学2018年秋季 2083T信息技术与教育技术(2) 参考试题
- day 05 多行输出与多行注释、字符串的格式化输出、预设创建者和日期
- 健康评测 php,8款超好用的健康APP测评推荐!
- Java数据结构和算法-二叉树
- rest教程_REST保证教程
- mysql更改密码_Mysql更改密码、连接mysql、mysql常用命令
- 【英雄联盟动画-双城之战】10点首播!6亿召唤师快来
- 音频 ASIO 驱动开发
- java xps生成_Java PDF/XPS转为Word/html /SVG、PDF和XPS互转
- 趣味CSS3(一)--旋转的大风车
- 网易面试总结——面试案例9~面试案例12
- 交互式电子白板与计算机通过什么链接,交互式电子白板的作用详细介绍
- SQL报错:Ambiguous column name ‘数据库某列’
- 给PPT插入页码和总页码
- math函数常用操作
热门文章
- RabbitMQ 入门:2. Exchange 和 Queue
- 基于.NET Core的优秀开源项目合集
- Windows 7 安装 .NET 5 / .NET Core 3.1 环境的方法和依赖文件
- 玩转控件:对Dev的GridControl控件扩展
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)
- 200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]
- 从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书
- Abp 0.18.0 正式发布! -ABP CLI,新模板和其他功能
- Linux中以单容器部署Nginx+ASP.NET Core
- 张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用