接上一篇文章 簡(jiǎn)化markdown寫作中的貼圖流程(windows簡(jiǎn)陋版)
上一篇文章是 做了很久,除了對(duì)python不熟,還有懶,所以最終的結(jié)果不盡人意,可以說做出來一個(gè)半成品。能用,但用起來不爽。
所以,現(xiàn)在完成了基本版,基本版基本可用了
上次的版本是 獲取 全屏截圖,這樣的話像QQ截圖這些功能都用不上了,而且還是顯示很多不必要的元素在截圖里面,比如說下面這個(gè)圖啊

箭頭所指的地方,根本不應(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)
搞定收工。
這次用起來比較普通了。

已發(fā)布到 JIMBRAY