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

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

寫作作用流程

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

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

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

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

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

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

發(fā)表markdown文件到網(wǎng)絡(luò),刪除備份的MD.bak和清理本地圖片。

mark

需要用到的工具

環(huán)境

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

運行條件:

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,中文檢索結(jié)果就能解決問題。

實現(xiàn)

代碼上傳到GitHub,此處應(yīng)該有個流程圖。代碼中都有詳細(xì)的注釋。

流程圖

點擊看大圖

腳本配置

存儲

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

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

填入python 腳本中

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

圖片壓縮

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

tinify.key = '' # 設(shè)置tinipng的key

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

編程感想

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

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

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

markdown圖床現(xiàn)有輪子集錦

markdown傳圖的各種姿勢

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

原文發(fā)表于:

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容