热门关键字:
jquery > jquery教程 > jquery教程 > 用python实现选择截图区域

用python实现选择截图区域

497
作者:管理员
发布时间:2021/6/15 18:06:31
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=4939
  先上效果图:


  可以看到,和微信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对象绘制到一起,然后根据选框坐标裁剪图片,把图片数据输入到用户剪切板中。




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:jquery
友荐云推荐