接上一篇文章 簡(jiǎn)化markdown寫(xiě)作中的貼圖流程(windows簡(jiǎn)陋版)
上一篇文章是 做了很久恨樟,除了對(duì)python不熟叹放,還有懶斋日,所以最終的結(jié)果不盡人意,可以說(shuō)做出來(lái)一個(gè)半成品第献。能用,但用起來(lái)不爽兔港。
所以庸毫,現(xiàn)在完成了基本版衫樊,基本版基本可用了
上次的版本是 獲取 全屏截圖岔绸,這樣的話像QQ截圖這些功能都用不上了橡伞,而且還是顯示很多不必要的元素在截圖里面盒揉,比如說(shuō)下面這個(gè)圖啊
箭頭所指的地方,根本不應(yīng)該出現(xiàn)在截圖里面的兑徘,是多余的元素刚盈。
廢話不多說(shuō)挂脑,開(kāi)干。
思路跟實(shí)現(xiàn)跟上次一點(diǎn)區(qū)別都沒(méi)有
代碼也只是修改了一個(gè)函數(shù)肋联,其他的基本沒(méi)有變化
主要記錄遇到的幾個(gè)問(wèn)題
代碼
先把代碼貼出來(lái),再上問(wèn)題
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)在修改為獲取剪貼板中的圖片
遇到的問(wèn)題
問(wèn)題1
Unsupported BMP bitfields layout
這個(gè)是 Pillow 的bug侮繁,搜索到解決辦法:
作者:青南
鏈接:https://zhuanlan.zhihu.com/p/21303461
來(lái)源:知乎
這個(gè)問(wèn)題從Pillow 2.8.0開(kāi)始宪哩,一直到3.2.0都沒(méi)有被官方解決第晰。目前有一個(gè)間接的解決辦法锁孟。
請(qǐng)打開(kāi)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)容開(kā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")
就能解決本問(wèn)題。
問(wèn)題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
問(wèn)題解決桑包。在 ahk腳本中修改以下 新python文件的路徑就可以愉快地玩耍了
^!v::
run,%comspec% /c python D:\python\clipboard_to_qiniu.py
reload 以下 ahk 腳本,使用方法跟之前一模一樣赘方,不過(guò)現(xiàn)在支持像QQ這類(lèi)切圖軟件了弱左。
改進(jìn)
每次截圖之后,就會(huì)發(fā)現(xiàn) python文件所在文件夾就會(huì)多一張圖片拆火,都是已經(jīng)上傳到七牛的了跳夭,留下來(lái)沒(méi)有什么用處们镜,還浪費(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)
搞定收工颈抚。
這次用起來(lái)比較普通了嚼鹉。
已發(fā)布到 JIMBRAY