之前第一 个版本是命令行下交互的图床上传脚本,当初只是为了实现功能,聪聪的写完了,导致代码写得很烂,后来受到好友hyhmnn 的启发,增加了按键监听功能,在实际的写作过程中可以更高的提高 markdown 的写作效率了。

前言

第一个版本是在 Ubuntu下写出来的,一个命令行下的脚本,使用的是xclip来操作Ubuntu下的剪贴板。最近因为工作环境又迁移到了macOS下面,原来的Ubuntu下的脚本不能直接使用了,受到好友hyhmnn的按键监听的编程思维影响,决定来重新完善一下以前的脚本。

欢迎界面改进

欢迎界面是脚本执行后的界面,可以在欢迎界面加一些操作说明,方便用户快速上手。

第一版

只是用print一个个调整输出来的表格,可以说是非常的烂了。

第二版

使用了prettytable第三方模块来输出表格信息,实现起来很简洁。

保存截图

用户调用系统命令来将截图保存到本地,用于后面上传文件的操作。

第一版

Ubuntu下使用xclip来操作系统剪贴板,使用os.system来操作系统命令,将剪贴板中的图片保存到本地,默认保存到tmp临时文件目录下。

第二版

Mac下使用pngpaste来操作系统剪贴板,使用subprocess.Popen来操作系统命令,此外还增加了异常捕捉代码。

判断剪贴板中是否是图片

剪贴板中不一定都是图片,还有可能是字符串,如果是字符串的话则没法进行上传操作,得提示出异常信息。

第一版

首先不管剪贴板中的内容是什么,都将剪贴板内容保存到本地为sqlsec.png,然后判断这个文件的大小,如果这个文件的大小为0,说明剪贴板中不是图片格式。

第二版

保存图片调用subprocess.Popen来执行系统命令,将命令执行后的状态p.returncode返回,状态0代表命令执行没有异常,直接将图片上传;状态不为0,代表命令执行失败,说明剪贴板中没有图片数据。

提取 URL 信息

FreeBuf的上传图片的返回信息格式如下:

{'url':'images/20180618/15292843342543.png!small','title':'','original':'carbon.png','state':'SUCCESS'}

现在要从这一串返回信息中提取出url字段的值。

第一版

当时写这个脚本正则也忘记的一干二净了,所以在字符串提取的时候直接使用了str(r.text[8:42])这样僵硬的写法来提取字符串8-42位的字符串值 =,= 哇~ 好烂的代码。

第二版

使用正则的findall来对字符串进行匹配,匹配的规则是:images(.*?).png,匹配images.png之间的字符串,最后用这串值拼接出完整的url出来。

将图片外链拷贝到剪贴板

最后脚本生成的![](...)这种Markdown格式的外链时候,将其直接拷贝到剪贴板上方便写作的时候直接粘贴。

第一版

先将完整的外链信息写入到/tmp/sqlsec.txt中,然后调用xclip工具从这个txt文件中拷贝字符串信息。

第二版

借助pyperclip可以方便地操作系统剪贴板,直接调用.copy方法即可将要操作的字符串拷贝到剪贴板中。

新功能-按键监听

这里受到 Buzz2d0 的多进程编程思想的影响,这里我直接copy了他的按键检测进程代码,首先定义一个q = Queue(2)的执行条件,当按下ctrl按键的时候q.put(1)1,按下shift按键的时候q.put(2),满足了q=Queue(2)的条件执行Get_imgurl函数的操作。 主函数中调用了listener来建议按键的按下与释放。

功能演示

运行后脚本输出了一些相关信息方便用户的上手操作。

然后直接截图 使用Ctrl+Shift即可直接上传图片,此时剪贴板中已经是一个完整的图片外链了,直接在文章中粘贴即可。

点评

2021 年了,Typora 是我目前主力的 Markdown 编辑器,目前 Typora 很方便定制自己的图床上传脚本,时代变了,这个文章仅当做纪念使用,比较当初图床的概念还不是很火,有这个思路还是很不错的哈。

本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)

微信
支付宝

没想到文章加入打赏列表没几天 就有热心网友打赏了 于是国光我用 Bootstrap 重写了一个页面 用以感谢 支持我的朋友,详情请看 打赏列表 | 国光