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 SDK写一个同步脚本及使用教程
Aug 23 Python
python的mysqldb安装步骤详解
Aug 14 Python
儿童学习python的一些小技巧
May 27 Python
Django发送邮件功能实例详解
Sep 02 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python实现自动访问网页的例子
Feb 21 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
Python参数传递对象的引用原理解析
May 22 Python
用python制作个音乐下载器
Jan 30 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
python实现的人脸识别打卡系统
Python词云的正确实现方法实例
python神经网络编程之手写数字识别
利用Selenium添加cookie实现自动登录的示例代码(fofa)
Python基础之教你怎么在M1系统上使用pandas
python文件目录操作之os模块
May 08 #Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 #Python
You might like
php htmlspecialchars加强版
2010/02/16 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python中拆分字符串的操作方法
2019/07/23 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python: 传递列表副本方式
2019/12/19 Python
python定义类的简单用法
2020/07/24 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
美术指导助理求职信
2014/04/20 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
商场父亲节活动方案
2014/08/27 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
个人年终总结怎么写
2015/03/09 职场文书
求职意向书范本
2015/05/11 职场文书
师范生见习自我总结
2015/06/23 职场文书
我爱我班主题班会
2015/08/13 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
Docker部署Mysql8的实现步骤
2022/07/07 Servers