使用 Alfred 在 markdown 中優雅的使用圖片

渴二發表於2019-04-28

應用場景

用 Markdown 寫部落格的苦惱就是不能方便的在文章中插入圖片,所以需要一個好的圖床來幫助我們儲存圖片返回圖片連結,比如七牛雲。但是為了插入一張圖片,我們需要:

  1. 拿到圖片
  2. 開啟七牛雲網站上傳圖片
  3. 複製圖片外鏈地址
  4. 在 Markdown 檔案中使用![]()插入圖片
  5. 填寫圖片地址

當遇到部落格內容需要插入大量圖片時,真是心力交瘁,非常的不方便。所以需要一個工作流來幫助我們完成這些複雜的機械化工作。

預備工作

開始之前需要先安裝必要的軟體,並且註冊七牛賬號。

  1. 安裝 Alfred with Powerpack 如果你的電腦還沒有安裝 Alfred ,需要先到 官網 下載,因為需要用到提供的 workflow 功能,所以需要購買,當然網上也有破解版的。
  2. 安裝 qshell qshell 是七牛提供的命令列工具,以幫助大家更好的使用七牛服務。如何安裝下載 qshell,參考 官方文件
  3. 註冊七牛賬號 七牛是一個雲服務商,很多部落格都用七牛的物件儲存服務來做圖床。不過現在測試域名只有30天的使用許可權,如果想長期使用,還需要一個自己的備案域名

開始安裝

準備工作都已經完成之後,下面開始安裝配置 workflow。

  1. github 下載 qimage-mac 最新的 release 版本。 下載下來之後,解壓進入資料夾下雙擊 Qiniu.alfredworkflow 檔案安裝 workflow 。

    使用 Alfred 在 markdown 中優雅的使用圖片
    點選 import。
    使用 Alfred 在 markdown 中優雅的使用圖片
    其中 Hostkey 為快捷鍵配置,Run Script 為 AppleScript 指令碼,最右邊兩個為貼上板和系統通知。

  2. 配置 workflow 環境變數。 點選上圖示出的環境變數圖示,看到如下四個配置項。

    使用 Alfred 在 markdown 中優雅的使用圖片
    AccessKey & SecretKey:這是 qshell 操作個人賬號的憑證,登陸 七牛雲 之後在 管理控制檯 -> 個人中心 -> 金鑰管理 中可以看到 AccessKey 和 SecretKey。也可以直接開啟 portal.qiniu.com/user/key 看到。 bucket & bucketDomain:在 物件儲存 -> 儲存空間列表 中選擇或者新建一個儲存空間即 bucket,點選該 bucket 可以看到右側有測試域名。不過目前測試域名有效期為 30天,長期使用的話需要繫結一個已經備案的域名。域名即為 bucketDomain。
    使用 Alfred 在 markdown 中優雅的使用圖片

  3. 設定快捷鍵並且關聯應用。 雙擊 Hotkey 模組,設定自己習慣的快捷鍵用於觸發該 workflow 執行。

    使用 Alfred 在 markdown 中優雅的使用圖片
    這裡設定的是 option + command + v

  4. 因為 qshell 更新,需要更新 Run Script 指令碼。雙擊 Run Script,在編輯器中替換程式碼。

    -- config start
    property bucket : (system attribute "bucket")
    property bucketDomain : (system attribute "bucketDomain")
    property AccessKey : (system attribute "AccessKey")
    property SecretKey : (system attribute "SecretKey")
    property Account : (system attribute "Account")
    -- config end
    
    -- md5(date) as file name
    set fileName to do shell script "date \"+%Y%m%d%H%M%S\" | md5"
    
    -- see if clipboard is a file
    set filePath to ""
    try
    	set clipPath to the clipboard as «class furl»
    	set filePath to clipPath as alias
    	-- like "/Users/jverson/Pictures/igarss/IMG_20140720_221838.jpg"
    	set filePath to quoted form of POSIX path of filePath
    	set filePath to second item of my theSplit(filePath, "'")
    	set tempArray to my theSplit(filePath, ".")
    	-- like "jpg" or "png" or "gif" or "mp4"
    	set fileType to last item of tempArray
    end try
    
    if filePath is not "" then
    	set fileName to fileName & "." & fileType
    	set markdownUrl to my upload(fileName, filePath, fileType)
    	return markdownUrl --end
    end if
    
    
    -- see if clipboard is image data
    set jpegDATA to ""
    try
    	set jpegDATA to the clipboard as JPEG picture
    end try
    if jpegDATA is not "" then
    	set tempPath to "/tmp/"
    	set fileName to fileName & ".jpg"
    	set filePath to tempPath & fileName
    	set theFile to open for access filePath with write permission
    	write jpegDATA to theFile
    	close access theFile
    	set markdownUrl to my upload(fileName, filePath, "jpg")
        -- delete temp file
        do shell script "rm " & filePath
    	return markdownUrl
    end if
    
    beep 1
    display dialog ¬
    	"No file or image data found on the clipboard." with icon ¬
    	note buttons {"Whatever"} default button 1
    return
    
    -- string split function
    -- ref: http://erikslab.com/2007/08/31/applescript-how-to-split-a-string/
    on theSplit(theString, theDelimiter)
    	-- save delimiters to restore old settings
    	set oldDelimiters to AppleScript's text item delimiters
    	-- set delimiters to delimiter to be used
    	set AppleScript's text item delimiters to theDelimiter
    	-- create the array
    	set theArray to every text item of theString
    	-- restore the old setting
    	set AppleScript's text item delimiters to oldDelimiters
    	-- return the result
    	return theArray
    end theSplit
    
    -- upload image to qiniu
    on upload(fileName, filePath, fileType)
        -- compress image todo..
    
        -- qiniu account set
        set account_commond to "/usr/local/bin/qshell account -w " & AccessKey & " " & SecretKey & " " & Account
        do shell script account_commond
        -- upload to qiniu
    	set upload_command to "/usr/local/bin/qshell fput " & bucket & " " & fileName & " " & filePath
    	do shell script upload_command
        -- strcat url
        set resourceUrl to bucketDomain & fileName
        if (fileType is "png") or (fileType is "jpg") or (fileType is "gif") or (fileType is "bmp") or (fileType is "jpeg") then
    	    set markdownUrl to "![](" & resourceUrl & ")"
    	    return markdownUrl
        else
            return resourceUrl
        end if
    
    end upload
    
    -- ref:https://discussions.apple.com/thread/2379870?start=0&tstart=0
    複製程式碼

    並點選圖中環境變數圖示,新增變數 Account ,值為你七牛的使用者名稱。

    使用 Alfred 在 markdown 中優雅的使用圖片

  5. 開始使用。 現在就可以開始使用了,如果不按預期正常工作,可以點選 debug 按鈕,檢視控制檯報錯。

    使用 Alfred 在 markdown 中優雅的使用圖片

使用

  1. 截圖之後圖片儲存到貼上板中。
  2. 在 Markdown 檔案中需要插入的地方,使用之前設定的快捷鍵 option + command + v ,圖片地址就被插入貼上板中了,在需要使用的地方使用 ctrl + v 貼上就可以了。
    使用 Alfred 在 markdown 中優雅的使用圖片

遇到的問題

  1. 控制檯提示 execution error: sh: /usr/local/bin/qshell: No such file or directory (127) 解決:需要給 qshell 能夠在任何位置都可以執行,需要把 qshell 所在的目錄加到環境變數 $PATH 中去,或者將 qshell 執行檔案複製到 /usr/local/bin 資料夾下。

相關文章