vs00ASPNET 2020-04-29
上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包。这篇的主要功能是实现图片上传。
通过 pngquant 压缩图片后,得到一个 -fs8.png
为后缀的图片。想要把图片上传到云端,只需要把这个文件通过 API 发送给图片存储服务商就可以了。
先实现 sm.ms 网站的图片上传。官方提供了 API 文档,照着文档传入参数就可以搞定,so easy.
image.png上传接口的参数说明:
对应的 python 代码:
api_addr = ‘https://sm.ms/api/v2/upload‘files = { "smfile": open(file, ‘rb‘)}res = requests.post(url, files=files)
文件上传完毕以后,需要通过 API 的响应结果得到图片的 URL。 sm.ms 的响应结果包含 2 种情况:
{ "code": "image_repeated", "images": "https:..."}
{ "code": "success", "data": { "url": "https:..." }}
所以在上传的函数中添加判断,获取图片 url:
resp = res.json()code = resp.get(‘code‘)if code == ‘image_repeated‘: url = resp["images"] return urlelif code == ‘success‘: return resp["data"]["url"]
因为有时候并不是上传单张图片,而是要上传整个文件夹下面的图片,一次性需要处理多张图片的上传操作,所以可以共用一个 session, 对应的上传图片类:
image.png--upload
可选参数现在我可以选择是否把图片上传到网上,如果需要上传,就添加 --upload
参数;如果不需要上传,就不传这个命令行参数:
picom elephant.png -f --upload
增加 --upload
可选参数只需要在 cli 函数上多加一个 option, 然后添加上传代码就可以了:
最后得到的运行结果:
image.png上面上传的图片地址是在命令行显示的,如果一次性使用还好,但是如果需要重复使用就需要把图片的 URL 保存起来。
sm.ms 的账号功能可以管理已经上传的图片。所以如果有 sm.ms 的账号,就不需要这个保存的功能。 但是如果不想去注册账号,有一个委曲求全的办法,就是在当前文件夹创建一个名为 uploaded_img.yaml 的文件,把已经上传的图片地址保存起来。
可以通过新建一个选项 --record
来选择是否记录在本地。python 可以通过 pyyaml 库操作 yaml 文件,存储上传的图片数据。 也可以通过 json 格式保存,大致的格式是这样的:
{ "upload":[ { "name": "elephant.png", "url" : "http://img-server/ofos.png" } ]}
因为这个功能不是特别重要,甚至可以说鸡肋,就不贴代码了。
上传图片功能非常简单,只需要使用 requests 库的基础操作就可以完成各个图床服务商的上传操作。如果觉得 requests 库的操作比较慢,可以采用 aiohttp 进行异步传输。 这个工具暂且不考虑加快传输速度,因为现在的图床服务很多都是小本经营,没什么盈利能力,为了能提供长久服务,还是尽量少的给别人压力。
一款定位于Markdown文章排版与一键发布本地文章到等平台的Markdown编辑器。你可以尝试用JustWrite写作,因为JustWrite可以帮你排版,帮你美化,帮你处理本地图片,帮你一键发布!