python实现区域截屏(类似于QQ微信截图)功能

3 篇文章 0 订阅
2 篇文章 0 订阅

该功能是本人用python写的小工具集Jamtools里面的截屏部分整合,代码完全原创,分享出来。

CSDN源码下载地址:https://download.csdn.net/download/Fandes_F/12318103(积分支持一下呗)
GitHub项目地址:https://github.com/fandesfyf/Jamscreenshot (最新)记得点小星星h

转载请标明作者!

先上效果图:

在这里插入图片描述
可以看到,和微信QQ的截屏是十分相似的,还有微信QQ截屏没有的图片贴图等功能,工具栏在左侧
功能分析:
图片框选功能
图片遮罩功能(未选中的阴影显示)
鼠标放大镜功能(可调放大倍数)
贴图绘制功能(可以充当马赛克,还可以自定义绘制的材质贴图–达到绘图目的)
箭头(就是一个箭头贴图缩放而已)
圆形和方形绘制功能
文字绘制功能
画笔功能(大小可调)
橡皮擦功能(擦掉自己绘制的元素)
背景橡皮擦功能(擦掉截屏本来的图片元素)
最上面是设置画笔大小按钮、颜色选择按钮

从我的小工具集中提取出来后没有了控制界面,就简单地加了一个(确实有点简陋hhh),也随便设置了一下快捷键截屏ALT+Z(不是全局快捷键):
在这里插入图片描述
更复杂的界面自己可以改,
像我的Jamtools里面就做成了这个亚子
在这里插入图片描述
(没错,还有滚动截屏的部分暂时还没有开源,这篇文章不作讨论):

由于代码过长(差不多一千行了。。。可能我写的有点累赘,不过还能用hhh),这里就不贴了,可以直接下载,或者到GitHub下载(点小星星)

这里只解说原理和基本思路(不然可能代码都看不懂)。。。。

了解原理

前置学习知识

需要一定的python基础才能看懂。。
需要了解一些pyqt5的常用类和结构。。
需要了解图层、遮罩等知识。。

功能分析

总体:
截屏的界面分三层,每一层都是一个Qlabel对象:
主窗体是一个去边框的Qlabel对象,用于显示背景的截屏图片;
中间层是绘画层,parent是主窗体的Qlabel,所有画笔功能都在这一层(除了背景橡皮擦);
最表面的是遮罩层,parent也是主窗体的Qlabel,用于显示选框,未选中的阴影显示,同时监测并绘制边框;

所有的画笔参数、鼠标位置参数等都用主窗体来监测;通过self.parent.xxx向子层传递;
Qlabel相当于画板,Qlabel中的Qpixmap相当于画纸,可以用Qpainter在上面绘画;

主要流程:
截屏后把截取的图片全屏显示在主窗体Qlabel的pixmap中,使用setPixmap()方法即可。将主窗体全屏显示,就可以实现图片位置和原来屏幕上的位置对齐。在屏幕上点击后记录下选框的第一个点,把位置传递给遮罩层,在遮罩层上绘制起点到鼠标位置的方框并显示阴影区;鼠标释放后显示确定等按钮,可以使用右键返回上一步,使用左边画笔工具在第二层的Qlabel上绘图;在用户点击确定后,收集截屏选框坐标,把背景层的原图片和绘画层绘制的轨迹另存为Qpixmap对象把两个Qpixmap对象绘制到一起,然后根据选框坐标裁剪图片,把图片数据输入到用户剪切板中。

其他的像如何设置画笔、绘图等请自行研究了。。。不想解释。。。。

再放一遍:

CSDN下载地址

GitHub项目地址(最新)

Jamtools下载地址 更新到0.12版后支持三大操作系统喽!
一个集截屏、录屏、格式转换、翻译、文字识别、图像识别、键鼠动作录制播放、聊天机器人等功能的工具集。完全免费,禁止贩卖!

滚动截屏部分等我有空了整理一下再发出来蛤


2020.4.9更新
增加了图片固定在屏幕上的功能!
增加了窗口控件识别功能,可以实现类似微信截屏启动时的自动选择窗口的功能(wx是直接查找窗口控件实现的),原理是基于opencv的轮廓识别功能,可以得到更详细的窗口控件识别(甚至能识别出一行行的文字!),具体源码自行摸索~
源码已更新上传
滚动截屏部分也开源了(超级快的滚动截屏,比FSCapture.exe还要精准)

作者机械酱&Fandes

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fandes_F

饿饿~饭饭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值