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远程登录代码
Apr 29 Python
Python获取当前时间的方法
Jan 14 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
django1.11.1 models 数据库同步方法
May 30 Python
Python实现E-Mail收集插件实例教程
Feb 06 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
解决numpy和torch数据类型转化的问题
May 23 Python
python实现的人脸识别打卡系统
Python词云的正确实现方法实例
python神经网络编程之手写数字识别
利用Selenium添加cookie实现自动登录的示例代码(fofa)
Python基础之教你怎么在M1系统上使用pandas
python文件目录操作之os模块
May 08 #Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 #Python
You might like
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
phalcon框架使用指南
2016/02/23 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
总结python实现父类调用两种方法的不同
2017/01/15 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
给朋友的道歉信
2014/01/09 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python