"markdown一時爽, 分享火葬場", markdown的簡便性和美觀性一直受到諸多碼農(nóng)偏愛. 但是markdown文件不支持內(nèi)嵌圖片, 所有的圖片都以外部鏈接的方式插入. 所以分享Markdown文件的時候就不得不和圖片一起發(fā)送, 同時還得注意設(shè)置圖片路徑, 讓強(qiáng)迫癥患者難以接受.
結(jié)合base64編碼方式, 我找到了一種極為方便的在markdown文件中插入圖片的方法:
示例圖一: 在截屏快捷鍵截屏后直接復(fù)制base64編碼到Markdown編輯器
示例圖二: 在Markdown編輯器打開文件選擇框, 選擇圖片并粘貼base64編碼文件至Markdown編輯器.
要實現(xiàn)以上兩種功能需要完成以下幾個步驟:
1.利用文件選擇框選擇文件或者從剪貼板讀取圖像
2.將圖片轉(zhuǎn)為Base64編碼
3.將轉(zhuǎn)換結(jié)束的Base64編碼傳遞至剪貼板
4.將以上腳本綁定至Windows全局快捷鍵
首先, 我們考慮實現(xiàn)第一個功能: 從文件選擇框選擇文件或獲取剪貼板圖像
從文件選擇框選擇文件非常簡單, 可以用如下Python代碼實現(xiàn):
import win32ui
dlg = win32ui.CreateFileDialog(1) # 1表示打開文件對話框
dlg.SetOFNInitialDir('C:\\Users\\Desktop') # 設(shè)置打開文件對話框中的初始顯示目錄
dlg.DoModal()
filename = dlg.GetPathName() # 獲取選擇的文件路徑和名稱</pre>
第二個功能是獲取剪貼板的圖像文件, 同樣用如下代碼實現(xiàn):
from PIL import ImageGrab
im = ImageGrab.grabclipboard()#獲取剪貼板文件
if isinstance(im, Image.Image):
img = im
else:
pass
其實是實現(xiàn)圖片轉(zhuǎn)Base64編碼文本, 這一步非常簡單, python代碼如下:
with open("D:\\PythonCode\\base64pic\\1.jpg", 'rb') as f:
base64_data = base64.b64encode(f.read())
s = base64_data.decode()
print('(data:image/jpeg;base64,%s) \n'%s)</pre>
再次, 將Base64編碼傳遞至剪貼板. 這一步需要用CMD命令實現(xiàn), 使用CMD的 clip
命令即可, 代碼如下:
@echo off
python D:\\123.py | clip
以上代碼即可實現(xiàn)運(yùn)行python腳本, 同時將python腳本的輸出傳遞至剪貼板. 但是使用以上代碼, 就是我們使用了@echo off
關(guān)閉了命令行的代碼輸出, 使用命令的時候依舊會彈出難看的CMD命令框, 著實不夠優(yōu)雅.
還好, 我們永遠(yuǎn)有 Plan B. 我們還可以使用VBscript運(yùn)行腳本, 同時隱藏難看的CMD命令框, 代碼如下:
>Set ws = createObject("WScript.shell")
?
ws.run "cmd /c python D:\\PythonCode\\base64pic.py | clip",vbhide
最后, 我們考慮最后一個功能的實現(xiàn), 綁定以上腳本至Windows全局快捷鍵.
實現(xiàn)這一功能有兩種方式:
方法一是用Windows快捷方式自帶的實現(xiàn), 示意圖如下:
但是缺點(diǎn)在于反應(yīng)十分慢, 慢到難以接受.
第二種方法則是將腳本的快捷方式放在任務(wù)欄, 使用 Windows + 數(shù)字
的方式快捷調(diào)用, 示意圖如下:
一個小tips是, 可以用"更換圖標(biāo)" 的功能給快捷方式換一個好看的圖標(biāo), 示意圖如下:
結(jié)果就是這樣的:
附:
1.Python完整代碼
import win32ui,os,base64
from PIL import Image,ImageGrab
?
im = ImageGrab.grabclipboard()
if isinstance(im, Image.Image):
img = im
else:
dlg = win32ui.CreateFileDialog(1) # 1表示打開文件對話框
dlg.SetOFNInitialDir('C:\\Pictures') # 設(shè)置打開文件對話框中的初始顯示目錄
dlg.DoModal()
filename = dlg.GetPathName() # 獲取選擇的文件名稱
img = Image.open(filename)
?
img.thumbnail((778,439),Image.ANTIALIAS)
img=img.convert('RGB')
img.save("D:\\PythonCode\\base64pic\\1.jpg", quality=70)
?
with open("D:\\PythonCode\\base64pic\\1.jpg", 'rb') as f:
base64_data = base64.b64encode(f.read())
s = base64_data.decode()
print(''%s)
os.remove("D:\\PythonCode\\base64pic\\1.jpg")
2.VBS腳本完整代碼
Set ws = createObject("WScript.shell")
?
ws.run "cmd /c python D:\\PythonCode\\base64pic\\base64pic.py | clip",vbhide