這是Python小軟體系列文章,關注猿人學的老朋友知道我寫的Python文章可歸納為:Python爬蟲掙錢系列、Python爬蟲小偏方系列、Python非同步IO系列、Python小軟體系列等,我在這些系列中交替著寫,今天寫一個截圖的小應用。
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)和滑鼠選取做二次截圖。
3.開始寫截圖程式碼了
pynput、Tkinter、PIL官方和網上都有示例,拿過來改一改,把他們邏輯串在一起就可以除錯了。(我只是大自然的搬運工)
監聽鍵盤程式碼如下:
截圖、呼叫TK、二次截圖主邏輯如下:
想加一個演示效果的,結果錄屏軟體弄了很久,影片解析度都不理想,汗!
100多行程式碼搞定快捷鍵截圖功能,這就是用Python的好處,各種小功能都有解決方案,主要花的事情是拆解功能,選定實現路徑。
不過這樣由於是做了兩次截圖,第一次全屏截圖,第二次是在全屏截圖上再截圖,所以儲存下來的圖片不太清晰。
原始碼請在猿人學Python公眾號後臺回覆:jietu
python小軟體系列閱讀:
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***