python 實現的截圖工具

2022-09-28 18:24:09 字數 1555 閱讀 6702

新增了透視裁剪工具(類似於ps裡的用法)、多邊形截圖工具、取色器工具、油漆桶工具、背景還原畫筆(配合背景橡皮擦使用)、支援回退10步操作歷史記錄、新增一鍵還原按鈕、新增智慧型選框的開關。畫筆等增加透明度支援,在畫筆/標記時可以通過按住ctrl鍵+滾輪快速調整畫筆透明度,新增常用顏色到取色按鈕(滑鼠劃過即可顯示)、固定截圖在螢幕上時可以通hbgtrcwrd過按住ctrl+滾輪快速調節截圖的透明度

加了乙個簡陋的主介面

截圖效果:

可以看到,幾乎實現了微信截圖的所有功能,還有一些微信截圖沒有的功能,像材質畫筆、背景橡皮擦、所有顏色自選、畫筆大小/放大鏡倍數可通過滑輪調節等; **總長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檔案是資源檔案(滑鼠樣式等)

其他環境自行測試

截圖流程:

先分析使用者動作:使用者登記截圖按鈕(或按下快捷鍵)時截圖軟體開始響應(通過乙個按鈕事件或者pyqtsignal,其實都是signal,來呼叫起截圖函式screen_shot),迅速截下當前螢幕的全屏內容(通過pyqt的grabwindow函式),同時顯示截圖介面。

對截圖介面有幾點說明:

1.截圖介面就是乙個全屏視窗而已,該視窗是乙個label型別的控制項(因此可以直接將其當做背景層)有置頂、無邊框、滑鼠追蹤等屬性

2.截圖介面由背景層(slabel本身)、繪圖層(hbgtrcwrdpaintlayer類)和遮罩層(masklayer類)依次堆疊而成,每一層都是乙個qlabel,繪圖層和遮罩成以slabel作為parent,並呼叫self.parent.***直接獲得slabel的屬性。背景層用於顯示之前截圖時的那個全屏內容,因為之前那個程式設計客棧截圖是全螢幕截的,當前視窗又是全屏視窗,所以顯示背景中的內容的位置就是之前在螢幕中實際的位置,而且這個時間很短,看起來的結果就像是使用者直接操作在螢幕上一樣;第二層是繪圖層,有透明背景屬性,用於使用者進行塗鴉等操作(畫筆中除了背景相關的畫筆幾乎都作用於這一層);最上面一層是遮罩層,該層主要用於顯示截圖的陰影部分和方框(只是顯示而已程式設計客棧,背後的邏輯還是在它的parent即slabel中)

區域截圖過程:在進入截圖介面後使用者可以點選螢幕(該動作由mousepressevent捕獲),然後拖動(由mousemoveevent捕獲),然後鬆開(由mousereleaseevent捕獲),同時彈出確定按鈕(botton_box)即可在介面上顯示出選區介面。

關於選框引數,所有引數均在slabe程式設計客棧l主類中設定,self.x0,x1,y0,y1是選區的對角座標,在使用者點選下滑鼠左鍵時,記錄下當前的位置,然後動滑鼠時記錄下滑鼠位置,當鬆開滑鼠時記錄下鬆開的位置.注意每次點選/移動/鬆開滑鼠都會呼叫update函式使得所有層(包括遮罩層)的介面更新(即自動呼叫了paintevent函式)

Python實現截圖的函式

可指定儲存目錄.截圖名字以時間為檔名 截圖 存為jpg格式,比bmp小多的,乙個 的截圖bmp有 m多,乙個 的jpg只有 k左右.就可做乙個簡單的監控了,每 秒截一屏,放到乙個指定隱藏的資料夾裡,基本掌握機子的使用了,適合監控自家小孩的使用情況 coding cp936 import time,i...

Android 實現截圖

android實現截圖功能,使用view的方法,得到以時間戳命名的png view view v.getrootview view.setdrawingcacheenabled true view.builddrawingcache bitmap bitmap1 view.getdrawingcac...

WebView的截圖實現

webview的截圖主要有兩種實現方式 方式1 bitmap webview.getdrawingcache 可是,webview必需要mwebview.setdrawingcacheenabled true 此方式僅僅能擷取螢幕顯示的內容 方式2 picture snapshot webview....