markdown中图片自动传图床并替换

在以前写markdown文件的时候,关于用到最多的围脖图床,给我解决了图片引用的大问题。但是每次都需要自己手动的去上传图片,然后在md中用。更为糟心的是后来在Chorme中又不准用它,而在Safari里的使用又不是很友好。
于是乎,就萌生了自己做一个自动上传替换的脚本。借用一些现有的很不错的工具,转换效果还是很好的。

还是先上地址吧:点我传送 ~

需要用到的工具

环境

依然使用的是还算了解一些的Python3,关于它,还是看下 这里,我这里使用的是Mac系统。
其中还需要几个开源库,可以使用pip安装,pip获取方式可以根据 官网的教程文档获取安装。

懒人看的

如果不想看下面的几个子目录内容,在安装好pip以后,直接执行这几条命令就行了。

1
2
3
pip install --upgrade requests
pip install --upgrade tinify
pip install --upgrade qiniu

存储

在开始的时候,看过一些资料,都是用微博作为图床的比较多,没有上传限制、流量限制等,但是做起来可能相对要复杂一些,然后还有的人用的七牛,然后看了官方的文档还是很简单的, 这是官方的开发文档 ,免费的云存储空间和流量够个人使用了。
申请好个人账号,然后找到以下几个参数:
先到个人信息里找到找到ak和sk,然后在对象存储里找到空间名称、域名

图片压缩

由于七牛空间有限,为了节省空间,所以需要对图片做些压缩优化,这里使用的是tinypng做图片的压缩,官方的文档
随便找了个张图片压缩对比一下,还是很可观的:

这里需要注意的是,这个库貌似经常的500错误,而且每月还有压缩图片个数的限制,不过一般用的话也就够了,在脚本里也做了一下容错处理,在压缩失败的时候,会自动上传原图。

图片地址缓存

为了避免重复上传,在本地还做了一个缓存,保存下当前图片或者压缩后图片的hash和当前图片上传到图床的网址,还有一些其他信息,下次再上传相同图片的时候,可以通过图片的hash值,来找到已上传的地址,避免重复上传。
缓存文件在脚本所在的统计目录,是用sqlite存储。

实现

还是看代码吧,点我传送 ~

代码写的乱,如有问题,欢迎留言 ~

下面算是一个流程图吧,将就着看吧。

使用

老样子:
python 脚本名 文件名 [是否图片压缩]
例: python ~/Dropbox/useful_script/Scripts/md文件图片图床转换/md_transfer.py ~/Desktop/t.md 0

  • 0 - 不需要压缩
  • 1 - 需要压缩,注意tiniPNGkey

省事的重点

为了省事,在linux/mac下还可以配置alias命令方便使用:

  1. 执行 vim ~/.bashrc
  2. 在其中加入自己的alias命令,这个可以添加多个,只需要一行一个就行了,如我的

    alias upimg='python ~/Dropbox/useful_script/Scripts/md文件图片图床转换/pic_to_qiniu.py'

  3. 然后保存退出
  4. 运行 source ~/.bashrc,不运行的话,刚刚编辑的alias命令会不生效
  5. 使用的时候就可以省事了,比如这样用 upimg ~/Desktop/t.png

这样的话,使用起来是不是更省事了?

测试

这篇日志中的图片就是用这个脚本传的,应该不用在举例了吧。

注意

这些重要的参数不要忘了哦 ~ 所以,漏掉的还是都在看一遍吧 ~

1
2
3
4
5
ak = '' # ak
sk = '' # sk
domain = '' # 上传域名
bucket = '' # 空间名称
tinify.key = '' # 设置tinipng的key