python 实现的截屏工具


Posted in Python onMay 08, 2021

项目地址

https://github.com/fandesfyf/Jamscreenshot

功能概述

新增了透视裁剪工具(类似于PS里的用法)、多边形截图工具、取色器工具、油漆桶工具、背景还原画笔(配合背景橡皮擦使用)、支持回退10步操作历史记录、新增一键还原按钮、新增智能选框的开关。画笔等增加透明度支持,在画笔/标记时可以通过按住ctrl键+滚轮快速调整画笔透明度,新增常用颜色到取色按钮(鼠标划过即可显示)、固定截屏在屏幕上时可以通过按住ctrl+滚轮快速调节截屏的透明度

效果图

加了一个简陋的主界面

python 实现的截屏工具

截图效果:

python 实现的截屏工具

python 实现的截屏工具

python 实现的截屏工具

可以看到,几乎实现了微信截图的所有功能,还有一些微信截图没有的功能,像材质图片画笔、背景橡皮擦、所有颜色自选、画笔大小/放大镜倍数可通过滑轮调节等; 代码总长2000+行,直接运行即可!

更新: 支持把多个图片固定在屏幕上

支持窗口控件识别(基于opencv的轮廓识别功能),需要opencv库!

直接pip install opencv-python即可(滚动截屏需要安装contrib版本的opencv,版本小于opencv-contrib-python==3.4.2.17)

模块安装

主要使用的是PyQt5模块 直接 pip install PyQt5 即可 还需要PIL 直接pip install Pillow 即可

附带的jamresourse.py文件是图片资源文件(鼠标样式等)

提交环境为python3.7 pyqt5==5.13.2 win10 一切正常!

其他环境自行测试

说一说大概的思路吧

截屏流程:

先分析用户动作:用户登记截屏按钮(或按下快捷键)时截屏软件开始响应(通过一个按钮事件或者pyqtsignal,其实都是signal,来调用起截屏函数screen_shot),迅速截下当前屏幕的全屏内容(通过pyqt的grabWindow函数),同时显示截屏界面。

对截屏界面有几点说明:

1.截屏界面就是一个全屏窗口而已,该窗口是一个label类型的控件(因此可以直接将其当做背景层)有置顶、无边框、鼠标追踪等属性

2.截屏界面由背景层(Slabel本身)、绘图层(PaintLayer类)和遮罩层(MaskLayer类)依次堆叠而成,每一层都是一个Qlabel,绘图层和遮罩成以Slabel作为parent,并调用self.parent.xxx直接获得Slabel的属性。背景层用于显示之前截屏时的那个全屏内容,因为之前那个截屏是全屏幕截的,当前窗口又是全屏窗口,所以显示背景中的内容的位置就是之前在屏幕中实际的位置,而且这个时间很短,看起来的结果就像是用户直接操作在屏幕上一样;第二层是绘图层,有透明背景属性,用于用户进行涂鸦等操作(画笔中除了背景相关的画笔几乎都作用于这一层);最上面一层是遮罩层,该层主要用于显示截屏的阴影部分和方框(只是显示而已,背后的逻辑还是在它的parent即Slabel中)

区域截屏过程:在进入截屏界面后用户可以点击屏幕(该动作由mousePressEvent捕获),然后拖动(由mouseMoveEvent捕获),然后松开(由mouseReleaseEvent捕获),同时弹出确定按钮(botton_box)即可在界面上显示出选区界面。

关于选框参数,所有参数均在Slabel主类中设置,self.x0,x1,y0,y1是选区的对角坐标,在用户点击下鼠标左键时,记录下当前的位置,然后动鼠标时记录下鼠标位置,当松开鼠标时记录下松开的位置.注意每次点击/移动/松开鼠标都会调用update函数使得所有层(包括遮罩层)的界面更新(即自动调用了paintEvent函数)

以上就是python 实现的截屏工具的详细内容,更多关于python 截屏工具的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用 Selenium 实现网页截图实例
Jul 18 Python
Python psutil模块简单使用实例
Apr 28 Python
Python+django实现文件上传
Jan 17 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Django 路由系统URLconf的使用
Oct 11 Python
windows下numpy下载与安装图文教程
Apr 02 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python流程控制语句的深入讲解
Jun 15 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
python实现的人脸识别打卡系统
Python词云的正确实现方法实例
python神经网络编程之手写数字识别
利用Selenium添加cookie实现自动登录的示例代码(fofa)
Python基础之教你怎么在M1系统上使用pandas
python文件目录操作之os模块
May 08 #Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 #Python
You might like
php编写一个简单的路由类
2011/04/13 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
Python中的map、reduce和filter浅析
2014/04/26 Python
详解Python迭代和迭代器
2016/03/28 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
python如何停止递归
2020/09/09 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
php优化查询foreach代码实例讲解
2021/03/24 PHP
客服服务心得体会
2013/12/30 职场文书
运动会拉拉队口号
2014/06/09 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
报案材料怎么写
2015/05/25 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript