okhttp3图片压缩上传_使用 python 压缩 png 图片,高达 80% 压缩率,肉眼无差异!...
发布日期:2021-06-24 16:21:21 浏览次数:3 分类:技术文章

本文共 2009 字,大约阅读时间需要 6 分钟。

在网上有很多使用 python 的 pillow 库进行图片压缩的教程,使用简单,但是压缩效果存在明显的色彩不自然,这是因为 pillow 库采取的压缩算法没有优化的问题。

这个系列实现一款简单的压缩工具,使用 pngquant 有损压缩,压缩率高达 80%, 而且压缩后的图片没有明显差异。

上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包。这篇的主要功能是实现图片上传。

图片上传功能的实现

通过 pngquant 压缩图片后,得到一个 -fs8.png 为后缀的图片。想要把图片上传到云端,只需要把这个文件通过 API 发送给图片存储服务商就可以了。

先实现 sm.ms 网站的图片上传。官方提供了 API 文档 ,照着文档传入参数就可以搞定,so easy.

5cf19699d626fce5302ff5f863e7ea8a.png

image.png

上传接口的参数说明:

  1. content-type 为 multipart/form-data ;
  2. Authorization 为可选项,当不需要用户管理时,可以不填;
  3. 传入文件的参数名为 smfile。

对应的 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 种情况:

  1. 当图片已经上传过一次,会通过图片的 hash 值判断出重复。响应中的 code 为 image_repeated, 可以通过 images 取得之前已存在的图片地址。
{ "code": "image_repeated", "images": "https:..."}复制代码
  1. 当图片是第一次上传,code 为 success, 可以通过 data 中的 url 获取图片地址。
{ "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, 对应的上传图片类:

d3136d8cfc83605ae72ff5653729d9a5.png

image.png

为命令行添加 --upload 可选参数

现在我可以选择是否把图片上传到网上,如果需要上传,就添加 --upload 参数;如果不需要上传,就不传这个命令行参数:

picom elephant.png -f --upload复制代码

增加 --upload 可选参数只需要在 cli 函数上多加一个 option, 然后添加上传代码就可以了:

7cb2d8d0a62a0065e2d330f3b465bb83.png

image.png

最后得到的运行结果:

7ba59252b2e1752dfc005e2b6c8c10b2.png

image.png

通过 yaml 记录以及上传过的图片地址

上面上传的图片地址是在命令行显示的,如果一次性使用还好,但是如果需要重复使用就需要把图片的 URL 保存起来。

sm.ms 的账号功能可以管理已经上传的图片。所以如果有 sm.ms 的账号,就不需要这个保存的功能。 但是如果不想去注册账号,有一个委曲求全的办法,就是在当前文件夹创建一个名为 uploaded_img.yaml 的文件,把已经上传的图片地址保存起来。

可以通过新建一个选项 --record 来选择是否记录在本地。python 可以通过 pyyaml 库操作 yaml 文件,存储上传的图片数据。 也可以通过 json 格式保存,大致的格式是这样的:

{ "upload":[  {   "name": "elephant.png",   "url" : "http://img-server/ofos.png"  } ]}复制代码

因为这个功能不是特别重要,甚至可以说鸡肋,就不贴代码了。

总结

9f4c12e05999c1994478ba9a5b826ed2.gif

picom-upload

上传图片功能非常简单,只需要使用 requests 库的基础操作就可以完成各个图床服务商的上传操作。如果觉得 requests 库的操作比较慢,可以采用 aiohttp 进行异步传输。 这个工具暂且不考虑加快传输速度,因为现在的图床服务很多都是小本经营,没什么盈利能力,为了能提供长久服务,还是尽量少的给别人压力。

源码获取私信小编01哦!

转载地址:https://blog.csdn.net/weixin_33800724/article/details/112350880 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:上海税前12000税后多少_新同事和老板谈的到手工资,带你一键计算总工资是多少~...
下一篇:樊登读书分享ppt_运营管理部读书会感悟分享——观看樊登读书之善战者说:孙子兵法与取胜法则十二讲视频...

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月09日 13时49分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Ubuntu 18.04 + NVIDIA Driver 410.104 + CUDA 10.0 + cudnn 7.5.0从零搭建深度学习环境 2019-04-28
ubuntu18.04安装pip pip3出现的问题及解决办法 2019-04-28
真正超详细手把手用YOLOv3训练自己的数据集实战过程记录(Ubuntu18.04) 2019-04-28
RGB-D图像知识以及与HHA的关系 2019-04-28
ResNet-50网络理解 2019-04-28
VGG16理解 2019-04-28
【论文阅读】A Simple Pooling-Based Design for Real-Time Salient Object Detection 2019-04-28
【论文阅读】Three-stream attention-aware network for RGB-D salient object detection 2019-04-28
【论文阅读】Emotion-Aware Human Attention Prediction 2019-04-28
对视觉显著性检测(Saliency Object Detection)中Channel Attention的一些总结 2019-04-28
【论文阅读】GhostNet: More Features from Cheap Operations(GhostNet学习笔记) 2019-04-28
TypeError: 'module' object is not callable 及解决办法 2019-04-28
Linux系统下R语言环境配置及用Pycharm编写第一个R程序 2019-04-28
Linux下基于Pytorch框架用HRNet提取骨架特征点+解决CUDA和Torch版本不匹配问题 2019-04-28
HRNet提取骨架特征点+ ST-GCN训练自己的数据集代码实践问题记录 2019-04-28
根据扩张卷积的dilation rate计算输出图片尺寸 2019-04-28
海康威视算法实习面试——我的第一次面试经历 2019-04-28
华东师范大学计算机博士申请经验记录 2019-04-28
为什么在Google Chrome中右键没有Set Character Encoding的选项 2019-04-28
python -m pip install --upgrade pip安装失败解决方案 2019-04-28