簡(jiǎn)化markdown寫作中的貼圖流程(windows基本版)

接上一篇文章 簡(jiǎn)化markdown寫作中的貼圖流程(windows簡(jiǎn)陋版)

上一篇文章是 做了很久,除了對(duì)python不熟,還有懶,所以最終的結(jié)果不盡人意,可以說做出來一個(gè)半成品。能用,但用起來不爽。
所以,現(xiàn)在完成了基本版,基本版基本可用了

上次的版本是 獲取 全屏截圖,這樣的話像QQ截圖這些功能都用不上了,而且還是顯示很多不必要的元素在截圖里面,比如說下面這個(gè)圖啊


img_1466342265.26.jpg

箭頭所指的地方,根本不應(yīng)該出現(xiàn)在截圖里面的,是多余的元素。
廢話不多說,開干。
思路跟實(shí)現(xiàn)跟上次一點(diǎn)區(qū)別都沒有
代碼也只是修改了一個(gè)函數(shù),其他的基本沒有變化
主要記錄遇到的幾個(gè)問題

代碼

先把代碼貼出來,再上問題

def save_clipboard_image():
    im = ImageGrab.grabclipboard()
    if im is None:
        print('Error: No image data in clipboard')
        return None

    if isinstance(im, Image.Image):
        print im.format, im.size, im.mode
        width, height = im.size
        saved_path = "img_" + str(time.time()) + ".jpg"
        # im.resize((30, 30), Image.ANTIALIAS).load()
        im.save(saved_path)

        print saved_path
        return saved_path
    else:
        print 'the object in clipboard is not a image.'
        return None

這個(gè)函數(shù)是修改的,之前是獲取全屏截圖,現(xiàn)在修改為獲取剪貼板中的圖片

遇到的問題

問題1
Unsupported BMP bitfields layout

這個(gè)是 Pillow 的bug,搜索到解決辦法:

作者:青南
鏈接:https://zhuanlan.zhihu.com/p/21303461
來源:知乎

這個(gè)問題從Pillow 2.8.0開始,一直到3.2.0都沒有被官方解決。目前有一個(gè)間接的解決辦法。
請(qǐng)打開Python安裝目錄下的\Lib\site-packages\PIL\BmpImagePlugin.py文件,將以下代碼:

if file_info['bits'] in SUPPORTED:
    if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])]
        self.mode = "RGBA" if raw_mode in ("BGRA",) else self.mode
    elif file_info['bits'] in (24, 16) and file_info['rgb_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]
    else:
        raise IOError("Unsupported BMP bitfields layout")
else:
    raise IOError("Unsupported BMP bitfields layout")

修改為:

if file_info['bits'] in SUPPORTED:
    if file_info['bits'] == 32 and file_info['rgba_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgba_mask'])]
        self.mode = "RGBA" if raw_mode in ("BGRA",) else self.mode
    elif file_info['bits'] in (24, 16) and file_info['rgb_mask'] in SUPPORTED[file_info['bits']]:
        raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]
    '''新增內(nèi)容開始'''
    elif file_info['bits'] == 32 and file_info['rgb_mask'] == (0xff0000, 0xff00, 0xff):
        pass
    '''新增內(nèi)容結(jié)束'''
    else:
        raise IOError("Unsupported BMP bitfields layout")
else:
    raise IOError("Unsupported BMP bitfields layout")

就能解決本問題。

問題2
IOError: image file is truncated (1044 bytes not processed)

搜索到解決辦法 Python:IOError: image file is truncated 的解決辦法

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

問題解決。在 ahk腳本中修改以下 新python文件的路徑就可以愉快地玩耍了

^!v::
run,%comspec% /c python D:\python\clipboard_to_qiniu.py

reload 以下 ahk 腳本,使用方法跟之前一模一樣,不過現(xiàn)在支持像QQ這類切圖軟件了。

改進(jìn)

每次截圖之后,就會(huì)發(fā)現(xiàn) python文件所在文件夾就會(huì)多一張圖片,都是已經(jīng)上傳到七牛的了,留下來沒有什么用處,還浪費(fèi)我空間。
那就再加一個(gè)邏輯吧:上傳到七牛后刪除本地的圖片

def deleteLocalImage(path):
    if(os.path.isfile(path)):#文件存在
        os.remove(path)

主函數(shù)也修改以下

if __name__ == '__main__':
    saved_path = save_clipboard_image()
    if saved_path == None:
        pass
    else:
        q = Qiniu(AK, SK)
        q.upload_file(bucket_name, saved_path, saved_path)
        deleteLocalImage(saved_path)

搞定收工。
這次用起來比較普通了。


img_1466343760.76.jpg

已發(fā)布到 JIMBRAY

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣。awesome-p...
    若與閱讀 19,364評(píng)論 4 417
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,846評(píng)論 6 427
  • 第一種人是那種講話不經(jīng)大腦還以此為榮的人。其實(shí)有些話,早就想說了,不過一直憋著。對(duì)于一些人來講,會(huì)覺得自己性格直,...
    maiyue閱讀 415評(píng)論 0 0
  • 大家好,我是陪伴家阿昌,今天是2017年11月18日 是阿昌每天一篇原創(chuàng)日記的 第107篇 今天是個(gè)繁忙的親子周末...
    陪伴家阿昌閱讀 350評(píng)論 0 1

友情鏈接更多精彩內(nèi)容