上一篇使用了 pngquant 图片压缩工具进行压缩,并经过 click 命令行工具构建了 picom 包。这篇的主要功能是实现图片上传。python
经过 pngquant 压缩图片后,获得一个 -fs8.png
为后缀的图片。想要把图片上传到云端,只须要把这个文件经过 API 发送给图片存储服务商就能够了。web
先实现 sm.ms 网站的图片上传。官方提供了 API 文档,照着文档传入参数就能够搞定,so easy.json
上传接口的参数说明:api
对应的 python 代码:session
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 url
elif code == 'success':
return resp["data"]["url"]
由于有时候并非上传单张图片,而是要上传整个文件夹下面的图片,一次性须要处理多张图片的上传操做,因此能够共用一个 session, 对应的上传图片类:函数
--upload
可选参数如今我能够选择是否把图片上传到网上,若是须要上传,就添加 --upload
参数;若是不须要上传,就不传这个命令行参数:工具
picom elephant.png -f --upload
增长 --upload
可选参数只须要在 cli 函数上多加一个 option, 而后添加上传代码就能够了:post
最后获得的运行结果:
上面上传的图片地址是在命令行显示的,若是一次性使用还好,可是若是须要重复使用就须要把图片的 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 进行异步传输。 这个工具暂且不考虑加快传输速度,由于如今的图床服务不少都是小本经营,没什么盈利能力,为了能提供长久服务,仍是尽可能少的给别人压力。