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

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

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

图片上传功能的实现

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

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

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 url
elif code == 'success':return resp["data"]["url"]
复制代码

因为有时候并不是上传单张图片,而是要上传整个文件夹下面的图片,一次性需要处理多张图片的上传操作,所以可以共用一个 session, 对应的上传图片类:

image.png

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

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

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

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

image.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"}]
}
复制代码

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

总结

picom-upload

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

源码获取私信小编01哦!

使用 python 压缩 png 图片,高达 80% 压缩率,肉眼无差异!相关推荐

  1. python图片压缩不失真_使用 python 压缩 png 图片,高达 80% 压缩率,肉眼无差异(一):为什么不用 pillow库.md...

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

  2. 基于python压缩gif图片大小。

    使用PIL.imageio,将gif拆帧.压缩.合成.博主使用的是PyCharm工具. 1.安装imageio.File-->Settings-->Project:pro-->Pro ...

  3. python压缩视频文件_python+压缩视频教程

    python+压缩视频教程内容摘要 python+压缩视频教程做饭的比较少.python做exe开发教程,可省却昂贵的租金,可设单世间.双世间.4世间.8世间,可设单人间.双人间.4人间.8人间,可去 ...

  4. python图片旋转脚本_Python+OpenCV 实现图片无损旋转90°且无黑边

    0. 引言 有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片. 然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便.本文解决图片旋转后出现黑边的问题,实现了图片尺寸不变的旋转 ...

  5. python 解压js压缩的图片_20行Python代码,无损压缩千百张图片!Python有多强!就不用说了...

    每个设计师.摄影师或有图片处理需求小编,都会面临批量 高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. ...

  6. 【pngquant】使用Python压缩图片,降低网页加载时间

    更多内容请点击 我的博客 查看,欢迎来访. 用来做什么? 个人在写博客时,发现上传的图片如果很大,web访问第一次加载该图片就特别的慢. 可以考虑使用缩略图,浏览时显示缩略图,如果要看高清图,需点击图 ...

  7. python pngquant 批量压缩png图片

    用pngquant压缩一个文件夹里所有图片 或 压缩一个文件夹里所有一级子文件夹里的图片 压缩后的图片分辨率调整为原来的0.5倍(根据自己的情况调整) 计算压缩前后的图片大小.压缩率和压缩用时 由于p ...

  8. python怎么把图片压缩_使用Python轻松批量压缩图片

    在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...

  9. python压缩图片--指定压缩大小且保真压缩

    代码核心思路 循环降低图片质量quality 直至图片质量大小符合目标质量后退出循环 pillow压缩失真严重 ''' pip install pillow ''' from io import By ...

最新文章

  1. android 封装的popwindow,Android UI开发 popupwindow介绍以及代码实例
  2. 4. 连续时间鞅(REN)
  3. 多图指南——微信小程序设计规范
  4. redis数据库价格_Caffeine和Redis居然可以这么搭,想不到吧,爱了爱了
  5. ps字体识别_PS字体包免费送:艺术+时尚+炫酷+复古等5000多款字体,由你来选择
  6. SAP Marketing Cloud里的contact main facet是什么意思
  7. 打印机设置虚拟服务器,虚拟机打印机服务器设置
  8. vmware安装渗透系统 Linux Kail最新版
  9. DeskClock选择闹钟声音时有重复选项
  10. 打开IE8总是提示欢迎使用?怎样使它不提示?
  11. 网络故障和网络诊断工具(5.0)
  12. Win10磁盘的分区与合并傻瓜教程
  13. 开源OA的公文编辑器详解:公文格式和基本使用
  14. 计算机word排版素材,WORD基础排版素材
  15. arduino 操纵杆_使用Arduino Leonardo开发板制作操纵杆游戏控制器
  16. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
  17. 纯H5+CSS3实现下雨特效
  18. V2.0 版本的 《JavaGuide面试突击版》来啦!带着它的在线阅读版本来啦!
  19. AutoCAD.NET API Lectures
  20. Linux 压缩解压和软件安装

热门文章

  1. el-tree 关键字搜索
  2. 不用U盘安卓Linux系统,安卓Android-X86 安装教程 不使用U盘安装Androidx86教程
  3. 微信公众号如何进行账号迁移?
  4. 属性子集选择的基本启发方法_【数据挖掘笔记三】数据预处理
  5. First Order Methods in Optimization Ch5. Smoothness and Strong Convexity
  6. Realm在android的应用
  7. Win10下安装Ubuntu双系统Ubuntu分区
  8. SaaS 系统的应用与架构
  9. 婚纱纪实类照片调色思路 教你PS洋气的油画效果
  10. 如何理解庄子所说的“吾生也有涯,而知也无涯。以有涯随无涯,殆己”?