Python:一個多功能的抓圖工具開發(附源碼)

來源:互聯網
上載者:User

    最近幾年,各種論壇回帖中經常會見到這樣的回複:無圖無真相。還有經常寫工作周報或者實驗結果時,均要貼幾張圖上去。所以,抓圖的需求在工作和生活中應用算是比較多的了,如果在家,我個人一直使用PrtSc鍵或QQ的抓圖工具,用PrtScr鍵的一個問題是,我必須開啟畫圖板(mspaint.exe),把剪貼簿中的圖片黏貼到畫布上,再另存新檔,還是比較麻煩的。如果在公司,因為用不了QQ,此時,要抓個一塊地區上的圖,還要通過畫圖板來編輯一下,也是比較浪費時間的。

   為解決一上問題,今天使用python寫了一個抓圖的工具,支援使用快速鍵抓取螢幕、當前視窗,所選地區三種需求,抓到之後並彈出儲存對話方塊,再也不用使用畫圖板中轉一下了,進入正題:

一、代碼:

#!/usr/bin/env python#coding=gb2312#此模組主要提供抓圖功能,支援以下三種抓圖方式:#1、抓取全屏,快速鍵CTRL+F1#2、抓取當前視窗,快速鍵CTRL+F2#3、抓取所選地區,快速鍵CTRL+F3#抓到之後,會自動彈出儲存對話方塊,選擇路徑儲存即可#*******************************************#更新記錄#0.1 2012-03-10 create by dyx1024#********************************************import pyhkimport wximport osimport sysfrom PIL import ImageGrabimport ctypesimport win32guiimport ctypes.wintypes def capture_fullscreen():    '''    Function:全屏抓圖    Input:NONE    Output: NONE    author: socrates    blog:http://blog.csdn.net/dyx1024    date:2012-03-10    '''      #抓圖       pic = ImageGrab.grab()        #儲存圖片    save_pic(pic)    def capture_current_windows():    '''    Function:抓取當前視窗    Input:NONE    Output: NONE    author: socrates    blog:http://blog.csdn.net/dyx1024    date:2012-03-10    '''     #視窗結構           class RECT(ctypes.Structure):        _fields_ = [('left', ctypes.c_long),                ('top', ctypes.c_long),                ('right', ctypes.c_long),                ('bottom', ctypes.c_long)]        def __str__(self):            return str((self.left, self.top, self.right, self.bottom))        rect = RECT()        #擷取當前視窗控制代碼    HWND = win32gui.GetForegroundWindow()        #取當前視窗座標    ctypes.windll.user32.GetWindowRect(HWND,ctypes.byref(rect))    #調整座標    rangle = (rect.left+2,rect.top+2,rect.right-2,rect.bottom-2)        #抓圖    pic = ImageGrab.grab(rangle)        #儲存    save_pic(pic)    def capture_choose_windows():    '''    Function:抓取選擇的地區,沒有自己寫這個,借用QQ抓圖功能    Input:NONE    Output: NONE    author: socrates    blog:http://blog.csdn.net/dyx1024    date:2012-03-10    '''         try:         #載入QQ抓圖使用的dll         dll_handle = ctypes.cdll.LoadLibrary('CameraDll.dll')     except Exception:             try:                 #如果dll載入失敗,則換種方法使用,直接運行,如果還失敗,退出                 os.system("Rundll32.exe CameraDll.dll, CameraSubArea")             except Exception:                 return        else:         try:             #載入dll成功,則調用抓圖函數,注:沒有分析清楚這個函數帶的參數個數             #及類型,所以此語句執行後會報參數缺少4個位元組,但不影響抓圖功能,所             #以直接忽略了些異常             dll_handle.CameraSubArea(0)         except Exception:             return           def save_pic(pic, filename = '未命令圖片.png'):    '''    Function:使用檔案對框,儲存圖片    Input:NONE    Output: NONE    author: socrates    blog:http://blog.csdn.net/dyx1024    date:2012-03-10    '''         app = wx.PySimpleApp()        wildcard = "PNG(*.png)|*.png"    dialog = wx.FileDialog(None, "Select a place", os.getcwd(),                           filename, wildcard, wx.SAVE)    if dialog.ShowModal() == wx.ID_OK:        pic.save(dialog.GetPath().encode('gb2312'))    else:        pass        dialog.Destroy()        def main():    '''    Function:主函數,註冊快速鍵    Input:NONE    Output: NONE    author: socrates    blog:http://blog.csdn.net/dyx1024    date:2012-03-10    '''                 #建立hotkey控制代碼     hot_handle = pyhk.pyhk()     #註冊抓取全屏快速鍵CTRL+F1    hot_handle.addHotkey(['Ctrl', 'F1'], capture_fullscreen)        #註冊抓取當前視窗快速鍵CTRL+F2    hot_handle.addHotkey(['Ctrl', 'F2'], capture_current_windows)        #註冊抓取所選地區快速鍵CTRL+F3    hot_handle.addHotkey(['Ctrl', 'F3'], capture_choose_windows)     #開始運行    hot_handle.start()    if __name__ == "__main__":    main() 

二、測試:

 程式運行後,可以看別的事情,如果要抓圖,根據要抓的圖片類型,按下相應的快速鍵即可,以片除第一張外,其他均使用本程式抓區。

 1、抓到後自動彈出儲存對話方塊

 

2、抓全屏(CTRL+F1)

2、抓當前視窗(CTRL+F2)

3、抓所選地區(CTRL+F3)

三、有待改進:

  後面考慮增加托盤顯示、使用者自訂快速鍵等功能,最終以exe格式發布(目前只做到了windows下使用,Linux下有空再研究一下)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.