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