markdown中本地和線上圖片自動傳圖床并替換鏈接

我根據網上現有的兩個Python腳本(《markdown文件中圖片到圖床的轉換》hxzqlh/qiniu-markdown-pics)以及七牛官方的Python SDK,優化改編了一個新的Python 3腳本,能夠自動將markdown中的本地和線上圖片(如微信公眾號中的圖片)批量上傳到圖床七牛的Bucket,并自動替換markdown文件中的鏈接。

寫作作用流程

在markdown軟件(如Typora)中專心進行寫作,隨意插入本地及網絡圖片,不需要中斷下來傳個圖。

本地圖片可以是電腦中任意位置的文件(使用絕對路徑),也可以MD同名文件夾下的圖片(使用相對路徑)。插入的網絡圖片也不用擔心出現“此圖片來自微信公眾平臺,未經允許不可引用”之類問題,因為腳本處理之后會直接轉到到個人的七??臻g。插入網絡圖片如果是自己的七??臻g里面的圖片,腳本會自動忽略,避免重復上傳。

插完圖之后也可以隨時修改,不用擔心圖片管理混亂的問題(上傳的圖床的圖片不方便管理)。

寫作完成,瀏覽修改,運行

python 腳本路徑 MD文件路徑 [是否圖片壓縮]
  • 0 - 不需要壓縮
  • 1 - 需要壓縮,注意tiniPNGkey

上傳之后的七牛中的圖片名稱為上傳日期-MD文件名/image序號.png or jpg,方便后期管理和備份

發表markdown文件到網絡,刪除備份的MD.bak和清理本地圖片。

mark

需要用到的工具

環境

這是一個Python 3 腳本,在Microsoft Windows 10 (Home Insider Preview China 10.0.17025)、Anaconda 4.3.27、python 3.6.2、PyCharm 2017.2.4 環境調試完成。

運行條件:

import re
import os
import sys
import time
import math
import imghdr
import shutil
import random
import string
import tinify
import urllib
import sqlite3
import operator
from hashlib import md5
from qiniu import Auth, put_file, etag, BucketManager
from datetime import date
import validators

只看了入門書《A Byte of Python》中文版,就能使用上述工具,遇到問題直接Google,中文檢索結果就能解決問題。

實現

代碼上傳到GitHub,此處應該有個流程圖。代碼中都有詳細的注釋。

流程圖

點擊看大圖

腳本配置

存儲

網上都說七牛圖床好,目錄是10G空間+10G流量,圖片大小適當控制應該夠我用了。等到我不夠用的時候,也許我有經濟實力購買更多空間和流量了。

注冊七牛個人賬號,獲取AccessKey/SecretKey、空間名稱(bucket name)和域名(domain)

填入python 腳本中

ak = ' '
sk = ' '
domain = ' ' # 上傳域名
bucket = '' # 空間名稱

圖片壓縮

調用tinypng來壓縮,壓縮配置直接照搬《markdown文件中圖片到圖床的轉換》的。七牛的SDK也能提供壓縮,后期有空再研究一個兩個官方文檔,改進一下腳本。

tinify.key = '' # 設置tinipng的key

在非Windows系統運行,還要把腳本中對應的路徑的/改為\,已在腳本對應位置注釋。

編程感想

由于只看了《A Byte of Python》,只能算是一個初步的Python User。而且不具備系統的Python基礎知識,利用google搜索來慢慢調試是非常浪費時間的。這個腳本的編寫和調試就用了幾個晚上的時間。還花費了一些時間來搜索有沒有現有的輪子。

《markdown文件中圖片到圖床的轉換》的腳本修改了一下就能運行,但是這個腳本比較激進,沒有備份MD文件就直接覆蓋了。hxzqlh/qiniu-markdown-pics的是python 2 腳本,而且我調試時總是出現os.remove無法運行,不知道是在哪里被占用了,只能把os.remove給注釋掉,最后再手動刪除Temp下面的緩存文件。另外,它是把網絡圖片下載下來,用的是tempfile.mkstemp方法,這個文件也是要手動刪除的。在閱讀七牛官方SDK文檔時發現它可以直接獲取url,不用下載,于是決定還是自己寫一個上傳函數。

本來想直接有命令行中運行的,但發現安裝了Anaconda之后就沒辦法把模塊安裝到原版的Python 中,pip install之后的模塊都安裝在conda中,不過這樣也好,在conda中還能自動更新。

markdown圖床現有輪子集錦

markdown傳圖的各種姿勢

輪子 描述(教程鏈接) 批量處理 上傳本地圖片 轉存網絡圖片 多人維護 安全性
CodeFalling/hexo-asset-image hexo g之后html中圖像鏈接變為絕對路徑,插件有時有bug。與hexo qiniu插件合用時需要修改后者 push到GitHub之后MD中的圖片鏈接仍可預覽 × 用的人還算多
微信公眾號圖床 管理方便,微信壓縮和CDN 去除了照片信息,更安全。但數據在騰訊手上
新浪圖床上傳腳本 不需要發布微博,圖片只要上傳就會存在于圖床中 × × × 圖床不穩定,鏈接沒保障
hexo-qiniu-sync qiniu官方傳圖插件,需要學習一下如何配置。教程2 ×
批量替換網絡圖片的py2腳本 os.remove運行出錯。需要手動刪除緩存文件。本文已改進 × ×
qiniu-image-tool AutoHotkey和qshell實現,一鍵上傳圖片或截圖至七牛云,獲取圖片的markdown引用至剪貼板,并自動粘貼到當前編輯器。經常出錯 × ×
MWeb for Mac
批量替換本地圖片的py3腳本 如正文所述 ×
laobie/WriteMarkdownLazilypy2 自動化替換 Markdown 中的本地圖片引用,使用LeadCloud × ×
上傳簡書圖片到七牛的py2腳本 × ×
markdown圖片實用工具 利用Python和AutoHotKey實現 × ×
極簡圖床 全球CDN加速, 支持外鏈、不限流量的免費圖床 × ×
MPic-圖床神器 完成度非常高的插圖小軟件,支持壓縮 × × 軟件未開源
GitHub上的更多開源工具 ? ?

原文發表于:

markdown中本地和線上圖片自動傳圖床并替換鏈接

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容