簡化markdown寫作中的貼圖流程

markdown寫作的時候,圖片插入是一件比較麻煩的事情。常見的流程如下:

  1. 用截圖工具截圖;
  2. 將截圖保存到某個地方
  3. 修改截圖文件名
  4. 上傳截圖到某個圖床(如果不用“圍脖是個好圖床”這樣的工具,還得用客戶端登陸)
  5. 拿到圖床上的截圖的鏈接;然后用markdown格式插入圖片

這么復雜的流程,讓人簡直沒有了插入圖片的欲望;但是大量的文字沒有圖片,必然讓人疲憊;

要是能隨便截個圖,然后直接粘貼就成了markdown格式就好了;自然是能夠做到!懶就是生產力~

效果預覽

首先看看最終達到的效果:
<img alt="效果預覽" src="http://7sbqce.com1.z0.glb.clouddn.com/markdownmarkdownimg.gif" width="660" />

第一步,截圖;第二步,粘貼;done!

詳見github介紹:https://github.com/tiann/markdown-img-upload

圖片上傳

準備工作

首先要做的是,簡化上傳圖片到圖床這個手工的過程,甚至連拖動圖片到瀏覽器插件都省略;這里就自然少不了使用圖床的SDK,用代碼來幫助我們完成上傳操作;

這里選擇七牛的圖床,然后新建一個空間,比如我的叫做booluimg,然后點擊空間設置里面的域名設置,看看域名是什么,那么以后我的圖片就會上傳到 這里。

用SDK上傳圖片

使用七牛提供的python SDK,下面的代碼可以將一個文件上傳到七牛的空間:

# -*- coding: utf-8 -*-

import os
from qiniu import Auth, put_file

access_key = '你的Access key' # AK
secret_key = '你的Secret Key' # SK

bucket_name = 'booluimg' # 七牛空間名

q = Auth(access_key, secret_key)

def upload_qiniu(path):
    ''' upload file to qiniu'''
    dirname, filename = os.path.split(path)
    key = 'markdown/%s' % filename # upload to qiniu's markdown dir

    token = q.upload_token(bucket_name, key)
    ret, info = put_file(token, key, path, check_crc=True)
    return ret != None and ret['key'] == key

訪問剪切版

如果我們進行截圖或者復制圖片,那么圖片是存儲在系統的剪切版里面的;要將這個圖片上傳,必需先從剪切版里面弄出來。

mac

mac訪問剪切版比較簡單,如果是文本類型,那么可以直接使用pbcopy, pbpaste這兩個命令解決;如果訪問其他的多媒體類型,可以使用系統內置的python與objc的訪問接口PyObjC;具體關于剪切版的文檔可以參考PyObjC文檔Objc剪切版文檔(不會objc沒關系,能看懂)

如下:

# -*- coding: utf-8 -*-
# clipboard.py
import time
from AppKit import NSPasteboard, NSPasteboardTypePNG, NSPasteboardTypeTIFF

def get_paste_img_file():
    pb = NSPasteboard.generalPasteboard()
    data_type = pb.types()
    # if img file
    print data_type
    now = int(time.time() * 1000) # used for filename
    if NSPasteboardTypePNG in data_type:
        # png
        data = pb.dataForType_(NSPasteboardTypePNG)
        filename = '%s.png' % now
        filepath = '/tmp/%s' % filename
        ret = data.writeToFile_atomically_(filepath, False)
        if ret:
            return filepath
    elif NSPasteboardTypeTIFF in data_type:
        # tiff
        data = pb.dataForType_(NSPasteboardTypeTIFF)
        filename = '%s.tiff' % now
        filepath = '/tmp/%s' % filename
        ret = data.writeToFile_atomically_(filepath, False)
        if ret:
            return filepath
    elif NSPasteboardTypeString in data_type:
        # string todo, recognise url of png & jpg
        pass

Windows

windows下,可以裝個pywin32然后使用win32api直接訪問,具體如何操作自己解決。

自動化流程

先闡述一下要達到的理想狀態:用截圖工具截圖(圖片默認保存在剪切版),然后在編輯器按下某個類似于粘貼的快捷鍵,得到一個上傳好了到七牛的marddown格式的圖片;

如何達到這個要求呢?上傳圖片以及到從剪切版獲取圖片都已經完成,接下來就是這個按鍵的自動化操作了;在mac上,可以使用Alfred工作流,Windows上,可以使用Autohotkey。

mac下使用alfred工作流

使用Alfred新建一個空白的工作流,然后新建一個trigger,快捷鍵綁定為“ctrl + cmd + v”;然后新建一個run script,選擇python;然后填上如下代碼:

query = "{query}"
from clipboard import get_paste_img_file
from upload import upload_qiniu
import os

url = "http://7sbqce.com1.z0.glb.clouddn.com/markdown"

img_file = get_paste_img_file()
if img_file:
    # has file
    ret = upload_qiniu(img_file)
    if ret:
        # upload success
        name = os.path.split(img_file)[1]
        markdown_url = "![](%s/%s?imageMogr2/thumbnail/!50p/quality/100!)" % (url, name)
        # make it to clipboard
        os.system("echo '%s' | pbcopy" % markdown_url)
        os.system('osascript -e \'tell application "System Events" to keystroke "v" using command down\'')
    else: print "upload_failed"
else:
    print "get img file failed"

其中,復制到剪切版以及按下cmd + v復制這個功能,使用的系統命令pbcopy, osascript這體現了python作為膠水語言的強大之處!

這樣,這個workflow就完成了,用系統截圖工具cmd + option +ctrl + 4截個圖,然后在一個編輯器里面按下cmd + ctrl + v看看是什么效果~

另外有個問題是,mac的retina屏幕截圖如果直接使用的話,會是原來的兩倍大,我用了七牛的API將圖片縮小了一半,但是質量卻不太好,不知道有什么辦法。

更新:使用mac自帶的sips工具得到圖片的尺寸;然后使用img標簽替代markdown格式的圖片;然后使用css屬性控制這個圖片的寬度。
更新2: 使用mac通知中心在上傳圖片失敗的時候給出提醒

windows下使用autohotkey

windows下面沒有Alfred,但是有強大的AutoHotKey,出發快捷鍵以及按下ctrl + v完全可以用這個實現;有興趣的可以自己實現,非常簡單。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容