吴良超的学习笔记

Markdown 图片免费上传工具

对于习惯用 markdown 写作的人,日常最烦恼的问题之一应该是如何显示自己的图片,markdown 文本存储的是图片的地址(本地路径或url),而最为常用的是 url,至少我写文章是这样的。某些 markdown 编辑器也提供了 markdown 图床服务,如有道云笔记,cmd_markdown等, 但是这些编辑器要么太丑(有道云笔记,说的就是你),要么就是比较小众(cmd markdown),生怕哪天停止运营了文章里的图片就没了,而且这些服务一般是要收费的。

那么有没有一种方法能够为本地图片生成 public url,同时保证数据有较高的可用性,而且最好是免费的。Github 其实已经间接为我们提供了这样的服务,只是这个步骤较为繁琐,本文就是针对这一点开发了一个小工具来简化这个过程,代码已开源,见 MarkdownImageUploader,本文主要介绍其基本原理和使用方法。

原理

这个方法是基于 Github 会为 repository 中的每张图片生成一个 public url,假设你的 Github 某个 repository 的有某张图片, 那么访问这张图片的 public url 为

https://raw.githubusercontent.com/{user}/{repository}/{branch}/{img_path}

其中,{user} 就是你的 Github 用户名称,{repository} 是你的仓库名称,{branch} 是你的分支名称,{img_path} 则是这张图片在这个 repository 中的路径;如对于这张图片,其 public url 为

https://raw.githubusercontent.com/wulc/MarkDownImages/master/GFS_Architecture.png

所以此时问题就变得很直观了,只需要将需要生成 public url 的图片 push 到 github,然后按照上面的规则生成图片的 public url 即可,感谢 Github。

使用

但是这个过程如果重复多次也会显得重复而繁琐,每次都要 add && commit && push, 因此,本文开发了一个简单的小工具 MarkdownImageUploader 来让这个过程更为便捷。

MarkdownImageUploader 主要思想就是通过提供一个简单的界面,通过按钮来提供上面的功能,按钮按下后执行 git commit 等操作,因此使用前需要确保

1. git 已经安装且在 PATH 环境变量中
2. 上传的图片的仓库是 public 且具备修改权限

建议在使用前首先在 github 上建立一个 public repository,专门用于存储图片;并配置 MarkdownImageUploader 的 repo_address 为其地址,然后配置本地存储这个 repository 的路径,这个配置只需要在第一次使用时进行配置,之后 MarkdownImageUploader 会在 config 目录下生成文件保存这些信息,之后的使用也可随时更新这些信息。该过程如下图所示

configure

在配置后,点击 commit & push 进行图片的上传,程序首先会检查配置的本地 repository 的路径中是否已经存在了这个 repository,没有的话会先 clone 到本地,然后填写 commit message 进行 commit 和 push,需要注意这两者都不能为空,我一般会将文章的标题作为 commit message。该过程如下所示

upload

Windows 用户可直接从release下载可执行文件,win10 和 win7 的 64 位系统测试过都可用,32位系统的不确定,但是也可通过源码和 PyInstaller 进行构建;Linux 和 Mac 可以下载源码,然后直接运行 python main.py 为后台程序,但是需要安装依赖库 PySimpleGUI,而且 PySimpleGUI 在 Mac 上适配性不太好,不确保能顺利运行。

代码

代码使用的 GUI 库是 PySimpleGUI,一个小众但是比较方便的库;调用 git 命令使用的 python 的 subprocess 库,调用 git 命令时会捕获异常并弹窗提醒,但是当前的异常没有细分(比如说 commit & push 失败后,并不知道是 commit 或 push 环节失败的);所以直接使用时建议先在命令行跑通 git 这几条命令。

代码很简单,所有代码不到 200 行(见main.py), 程序的 UI 极丑(捂脸),但是目前基本能满足我的使用需求,先使用一段时间看看,后续如果有 bug 或新的需求再更改。

最后, Github 生成的图片的 url 的域名是 githubusercontent.com, 万一哪天 Github 放弃了这个域名或不再提供单张图片的 url,那就凉凉了,不过在当前看来短期发生这个事情的可能性不大。而其实通过付费使用大厂提供的 markdown 图床也是很方便的,如果有道云笔记把界面做得更好看一点,其实我还是挺愿意为其付费的。