1.截屏应用功能拆解
先把要实现哪些功能罗列一下,功能拆解好了,程序设计时就比较清晰。
1).首先要能响应快捷键调起截屏程序,像QQ使用Ctrl+shift+B可以截屏一样;
2).然后就是截图功能,可以用鼠标选取截取的区域;
3).最后是要把截屏保存为本地图片。
2.做一下技术调研
功能拆解出来了,就开始调查下实现难度,有没有现成的第三方库可用,Python是出了名的库多,多找一找总会找到的。
搜寻了一下Python有截图功能的库,基本都是全屏截图和程序输入坐标来区域截图,没办法用鼠标选择可视化截图。不过网上有同学提出通过写一个GUI程序,把全屏截图展示在这个GUI界面上,然后在GUI上可以实现鼠标可视化选取功能。
看起来还不错,因为之前用过Tkinter,所以就用Tkinter来做GUI了,不过很久没写,手也生得很。
Tkinkter可以监听键盘事件,但是只有当焦点在Tkinter上时才会响应键盘事件,而截图应用是截其他地方的图,比如浏览器,聊天软件等等,焦点这时肯定不在Tkinter上,所以需要另找一个可以全局监听键盘事件的库,pynput就进入了法眼。
跟截图图片处理的话,首先就想到PIL库,它的ImageGrab方法能够全局截图,也能传入坐标实现区域截图,就选PIL了。
一番搜寻下来确定了实现方法:
使用pynput库来监听键盘,使用Tkinter来做GUI,使用PIL的ImageGrab来截图。
详细的实现原理是:
当程序运行起来后就在后台监听键盘,当键盘按下ctrl+shift+M时就使用PIL做全屏截图,接着用Tkinter把全屏截图显示出来,通过Tkinter的画布(canvas)和鼠标选取做二次截图。
大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法和需要注意的小细节
点击:python技术分享交流
3.开始写截图代码了
pynput、Tkinter、PIL官方和网上都有示例,拿过来改一改,把他们逻辑串在一起就可以调试了。(我只是大自然的搬运工)
监听键盘代码如下:
截图、调用TK、二次截图主逻辑如下:
想加一个演示效果的,结果录屏软件弄了很久,视频分辨率都不理想,汗!
100多行代码搞定快捷键截屏功能,这就是用Python的好处,各种小功能都有解决方案,主要花的事情是拆解功能,选定实现路径。
不过这样由于是做了两次截图,第一次全屏截图,第二次是在全屏截图上再截图,所以保存下来的图片不太清晰。
原文地址:https://blog.51cto.com/14318113/2392930