我根据网上现有的两个Python脚本(《markdown文件中图片到图床的转换》、hxzqlh/qiniu-markdown-pics)以及七牛官方的Python SDK,优化改编了一个新的Python 3脚本,能够自动将markdown中的本地和线上图片(如微信公众号中的图片)批量上传到图床七牛的Bucket,并自动替换markdown文件中的链接。
写作作用流程
在markdown软件(如Typora)中专心进行写作,随意插入本地及网络图片,不需要中断下来传个图。
本地图片可以是电脑中任意位置的文件(使用绝对路径),也可以MD同名文件夹下的图片(使用相对路径)。插入的网络图片也不用担心出现“此图片来自微信公众平台,未经允许不可引用
”之类问题,因为脚本处理之后会直接转到到个人的七牛空间。插入网络图片如果是自己的七牛空间里面的图片,脚本会自动忽略,避免重复上传。
插完图之后也可以随时修改,不用担心图片管理混乱的问题(上传的图床的图片不方便管理)。
写作完成,浏览修改,运行
1 | python 脚本路径 MD文件路径 [是否图片压缩] |
- 0 - 不需要压缩
- 1 - 需要压缩,注意
tiniPNG
的key
上传之后的七牛中的图片名称为上传日期-MD文件名/image序号.png or jpg
,方便后期管理和备份
发表markdown文件到网络,删除备份的MD.bak和清理本地图片。
需要用到的工具
环境
这是一个Python 3 脚本,在Microsoft Windows 10 (Home Insider Preview China 10.0.17025)、Anaconda 4.3.27、python 3.6.2、PyCharm 2017.2.4 环境调试完成。
运行条件:
1 | import re |
只看了入门书《A Byte of Python》中文版,就能使用上述工具,遇到问题直接Google,中文检索结果就能解决问题。
实现
代码上传到GitHub,此处应该有个流程图。代码中都有详细的注释。
脚本配置
存储
网上都说七牛图床好,目录是10G空间+10G流量,图片大小适当控制应该够我用了。等到我不够用的时候,也许我有经济实力购买更多空间和流量了。
先注册七牛个人账号,获取AccessKey/SecretKey、空间名称(bucket name)和域名(domain)
填入python 脚本中
1 | ak = ' ' |
图片压缩
调用tinypng来压缩,压缩配置直接照搬《markdown文件中图片到图床的转换》的。七牛的SDK也能提供压缩,后期有空再研究一个两个官方文档,改进一下脚本。
1 | 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上的更多开源工具 | ? | ? | ? | ? | ? |