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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
跟老齐学Python之通过Python连接数据库
Oct 28 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
python+opencv识别图片中的圆形
Mar 25 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
numpy下的flatten()函数用法详解
May 27 Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
python实现的人脸识别打卡系统
Python词云的正确实现方法实例
python神经网络编程之手写数字识别
利用Selenium添加cookie实现自动登录的示例代码(fofa)
Python基础之教你怎么在M1系统上使用pandas
python文件目录操作之os模块
May 08 #Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 #Python
You might like
php中引用符号(&)的使用详解
2013/11/13 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
详解用python写一个抽奖程序
2019/05/10 Python
OpenCV 边缘检测
2019/07/10 Python
python 监控logcat关键字功能
2020/09/04 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
大学军训感言300字
2014/03/09 职场文书
春节超市活动方案
2014/08/14 职场文书
给客户的感谢信
2015/01/21 职场文书
邀请函模板
2015/02/02 职场文书
违纪学生保证书
2015/02/27 职场文书
2015教师节通讯稿
2015/07/20 职场文书
离婚财产分割协议书
2015/08/11 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python