使用 python 压缩 png 图片,高达 80% 压缩率,肉眼无差异!
在网上有很多使用 python 的 pillow 库进行图片压缩的教程,使用简单,但是压缩效果存在明显的色彩不自然,这是因为 pillow 库采取的压缩算法没有优化的问题。
这个系列实现一款简单的压缩工具,使用 pngquant 有损压缩,压缩率高达 80%, 而且压缩后的图片没有明显差异。
上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包。这篇的主要功能是实现图片上传。
图片上传功能的实现
通过 pngquant 压缩图片后,得到一个 -fs8.png 为后缀的图片。想要把图片上传到云端,只需要把这个文件通过 API 发送给图片存储服务商就可以了。
先实现 sm.ms 网站的图片上传。官方提供了 API 文档 ,照着文档传入参数就可以搞定,so easy.
image.png
上传接口的参数说明:
- content-type 为 multipart/form-data ;
- Authorization 为可选项,当不需要用户管理时,可以不填;
- 传入文件的参数名为 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 种情况:
- 当图片已经上传过一次,会通过图片的 hash 值判断出重复。响应中的 code 为 image_repeated, 可以通过 images 取得之前已存在的图片地址。
{"code": "image_repeated","images": "https:..." } 复制代码
- 当图片是第一次上传,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% 压缩率,肉眼无差异!相关推荐
- python图片压缩不失真_使用 python 压缩 png 图片,高达 80% 压缩率,肉眼无差异(一):为什么不用 pillow库.md...
在网上有很多使用 python 的 pillow 库进行图片压缩的教程,使用简单,但是压缩效果存在明显的色彩不自然,这是因为 pillow 库采取的压缩算法没有优化的问题. 这个系列实现一款简单的压缩 ...
- 基于python压缩gif图片大小。
使用PIL.imageio,将gif拆帧.压缩.合成.博主使用的是PyCharm工具. 1.安装imageio.File-->Settings-->Project:pro-->Pro ...
- python压缩视频文件_python+压缩视频教程
python+压缩视频教程内容摘要 python+压缩视频教程做饭的比较少.python做exe开发教程,可省却昂贵的租金,可设单世间.双世间.4世间.8世间,可设单人间.双人间.4人间.8人间,可去 ...
- python图片旋转脚本_Python+OpenCV 实现图片无损旋转90°且无黑边
0. 引言 有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片. 然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便.本文解决图片旋转后出现黑边的问题,实现了图片尺寸不变的旋转 ...
- python 解压js压缩的图片_20行Python代码,无损压缩千百张图片!Python有多强!就不用说了...
每个设计师.摄影师或有图片处理需求小编,都会面临批量 高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. ...
- 【pngquant】使用Python压缩图片,降低网页加载时间
更多内容请点击 我的博客 查看,欢迎来访. 用来做什么? 个人在写博客时,发现上传的图片如果很大,web访问第一次加载该图片就特别的慢. 可以考虑使用缩略图,浏览时显示缩略图,如果要看高清图,需点击图 ...
- python pngquant 批量压缩png图片
用pngquant压缩一个文件夹里所有图片 或 压缩一个文件夹里所有一级子文件夹里的图片 压缩后的图片分辨率调整为原来的0.5倍(根据自己的情况调整) 计算压缩前后的图片大小.压缩率和压缩用时 由于p ...
- python怎么把图片压缩_使用Python轻松批量压缩图片
在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...
- python压缩图片--指定压缩大小且保真压缩
代码核心思路 循环降低图片质量quality 直至图片质量大小符合目标质量后退出循环 pillow压缩失真严重 ''' pip install pillow ''' from io import By ...
最新文章
- android 封装的popwindow,Android UI开发 popupwindow介绍以及代码实例
- 4. 连续时间鞅(REN)
- 多图指南——微信小程序设计规范
- redis数据库价格_Caffeine和Redis居然可以这么搭,想不到吧,爱了爱了
- ps字体识别_PS字体包免费送:艺术+时尚+炫酷+复古等5000多款字体,由你来选择
- SAP Marketing Cloud里的contact main facet是什么意思
- 打印机设置虚拟服务器,虚拟机打印机服务器设置
- vmware安装渗透系统 Linux Kail最新版
- DeskClock选择闹钟声音时有重复选项
- 打开IE8总是提示欢迎使用?怎样使它不提示?
- 网络故障和网络诊断工具(5.0)
- Win10磁盘的分区与合并傻瓜教程
- 开源OA的公文编辑器详解:公文格式和基本使用
- 计算机word排版素材,WORD基础排版素材
- arduino 操纵杆_使用Arduino Leonardo开发板制作操纵杆游戏控制器
- 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
- 纯H5+CSS3实现下雨特效
- V2.0 版本的 《JavaGuide面试突击版》来啦!带着它的在线阅读版本来啦!
- AutoCAD.NET API Lectures
- Linux 压缩解压和软件安装
热门文章
- el-tree 关键字搜索
- 不用U盘安卓Linux系统,安卓Android-X86 安装教程 不使用U盘安装Androidx86教程
- 微信公众号如何进行账号迁移?
- 属性子集选择的基本启发方法_【数据挖掘笔记三】数据预处理
- First Order Methods in Optimization Ch5. Smoothness and Strong Convexity
- Realm在android的应用
- Win10下安装Ubuntu双系统Ubuntu分区
- SaaS 系统的应用与架构
- 婚纱纪实类照片调色思路 教你PS洋气的油画效果
- 如何理解庄子所说的“吾生也有涯,而知也无涯。以有涯随无涯,殆己”?