Google最近开源了一种新的JPEG图片的压缩算法,称使用 Guetzli 压缩的 JPEG 图像文件比使用现有的方法小 20%~30%。由于项目最近正在研究图片的后期处理功能,所以马上体验了一下。

环境介绍

机型 MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
处理器 2.9 GHz Intel Core i5 双核4线程
内存 8 GB 2133 MHz LPDDR3


环境安装

1.推荐使用Homebrew安装,可省去编译过程,直接在Mac Terminal上体验算法。如本机没有Homebrew,可使用如下命令安装

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
Homebrew官网:https://brew.sh/index_zh-cn.html。

2.安装Homebrew成功之后,即可通过如下命令安装Guetzli

brew install guetzli

tips:如对git比较熟悉可通过git clone命令获取算法源码,通过make编译过后即可生成相应的bin文件


参数介绍

1.Guetzli的使用非常简单,共有四个参数

–verbose 打印Guetzli算法的处理过程
–quality 设定图片压缩质量85~100,默认为95.
–memlimit 由于Guetzli算法非常占用内存,可通过此命令设定算法占用内存上限,默认为6G。
–nomemlimit 取消内存限制

e.g. 将目录下a.jpg以90的质量压缩为b.jpg,显示操作记录,则命令如下

guetzli –quality 90 a.jpg b.jpg

2.Guetzli算法性能,按照官方文档说法,算法运行的cpu时间和占用内存(不设上限)均与所处理图片的像素相关。平均每1MPix处理的cpu时间为1min,占用内存约为300M。

图片像素的计算方式,以1920*1080像素的图片为例,它对应1920*1080/1024/1024=1.97MPix. 故而处理该图片大约需要占用600M内存进行2min的压缩。


性能实测

图片尺寸 压缩质量 cpu时间(s) 内存占用(M)
2048*2048 85 330 900+
1024*1024 85 86 200+
512*512 85 17 60+
100*100 85 0.5 1+

我们可以看出,cpu时间与官方文档基本相符,在处理大图时可能时间会有所增长,而内存占用相比较来说会比官方介绍偏低,cpu占用率则一直是单核满载。

总体来说,该算法

1. 对于cpu资源的占用率极高,按照实测情况,每个Guetzli任务对于cpu100%单核占用,则同时进行的Guetzli任务受到物理机内核数严重制约,并发处理能力较弱;
2. 对于内存资源的占用率偏高,Guetzli任务是个内存消耗大户,按照官方文档及测试结论,16G内存只够处理55MPIX,也就是同时处理30张以内的1920*1080像素的图片。
3.  Guetzli算法整体运行时间偏长,压缩20K左右的图片需要8s左右,而对于高像素图片,动辄上百K甚至几兆的图片,其处理时长显然是同步处理不能接受的。

压缩效果

性能测试完成后,下面我们来看一下图片的压缩比以及压缩效果。从网上挑选不同尺寸的图片进行压缩测试,测试结果如下。

图片尺寸(px) 原始大小(kb) 处理时长(s) 压缩大小(kb) 压缩比
1024*837 59 28 49 16.95%
1024*704 62 32 56 9.68%
1280*720 126 41 107 15.08%
1680*1050 228 70 186 18.42%
1920*1080 232 106 186 19.83%
1938*1098 156 73 130 16.67%
3840*2160 1434 520 1211 15.55%
1920*1080(png) 2600 143 270 89.62%

上面的测验结果可以看出,对于不同图片,Guetzli算法的压缩比也不同,但是10%以上的压缩比还是可以保证的。至于,为何测试中没有出现官方文档中提及的20%~30%的压缩比(已有博客证实了该压缩比确定可得),猜想原因可能有如下两点:

 1.  由于图片来源是网络,所以可能相关的图片网站已经对图片进行了一次压缩,导致压缩比没有达到预期效果。2.  得到较好的压缩比需要某些特定类型的图片,例如官方文档中提及的高质量的图片效果相对更好。  3. 官方文档如是说“Note that Guetzli is designed to work on high quality images. You should always prefer providing uncompressed input images (e.g. that haven't been already compressed with any JPEG encoders, including Guetzli). ”

此外,可能大家已经注意到最后一条压缩记录,压缩比高达89%,原因是

1. 该图片为png类型的图片,而Guetzli算法针对的是jpeg图片进行压缩,官方文档中的说法是“sRGB profile with a gamma of 2.2”,而png图片除了rgb通道还有alpha通道,猜测可能是因为压缩算法的输出是jpeg,因此将alpha通道进行了过滤,才有如此高的压缩比。
2.  jpeg图片本身就是有损压缩的格式,而png是无损压缩的格式,因此用png图片做测试有更高的压缩空间。

alpha通道:阿尔法通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。

正是因为jpeg图片没有alpha通道,因此它不支持透明效果。

css中的颜色属性值rgba中的a也是指的alpha通道。

tips:透明的png图片经过压缩后,透明部分会变为黑色,这也是由于损失了alpha通道导致的。


压缩对比

对于如下图片,我们一起来看看压缩后的效果。

以算法支持的最低质量85进行压缩后的,图片对比

可以看出,压缩后的效果还是很不错的,一些细节部分也得到了很好的保留。


结论

1.Guetzli算法本身设定的最低质量为85(如要更低的质量需要修改源码),以算法接受的最低质量85来压缩图片,新图质量不会有明显差异,而且图片的压缩比例也相对客观。

2.Guetzli算法压缩锁的图片兼容性极佳,压缩后的图片可在现有web端直接使用。

3.Guetzli算法效率很差,并且对系统资源要求较高,图片越大处理越慢,基本上在线的图片压缩不可采用该算法。

4.Guetzli算法支持的压缩类型目前仅为jpeg,也即是sRGB模式的图片,如带有其他通道的图片,压缩后会带来各种问题。

Google开源JPEG压缩算法--Guetzli体验相关推荐

  1. Google 开源的项目集合

    原链接 文为大家整理了 Google 开源的项目,看看有没有感兴趣的,排名顺序按照 Github ★Star 数排列. 0.机器学习系统 TensorFlow★Star 62533 TensorFlo ...

  2. 开源巨献:2017 年 Google 开源了这些超赞的项目

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 春节小长假,走亲访友之余,还可以利用一些零碎的时间收集学习资料,给自己充充电,好在 2018 ...

  3. 开源公司黄页之 Google 开源软件推荐

    在企业使用开源和贡献开源方面,Google一直是行业的典范.一直以来,Google都在极力推广和倡导开源,并发布了一系列开源项目.如果没有开源软件,Google也难以达到今日的成功.开源中国社区目前收 ...

  4. Google 开源的这个图片压缩器,值得一用

    今天给大家推荐一款由 Google 开源的图片压缩器 - Squoosh. 这款工具由  Google Chrome Labs 开发,适配当前所有主流浏览器,帮助开发者提升图片压缩效率. 文末有体验链 ...

  5. JPEG压缩算法步骤原理

    目录 JPEG压缩算法解密 步骤一:图像分割 步骤二:颜色空间转换RGB->YCbCr 步骤三:离散余弦变换 步骤四:数据量化 步骤五:哈弗曼编码 JPEG压缩算法解密 by jinchao 图 ...

  6. Google 开源的依赖注入库,比 Spring 更小更快!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:GinoBeFunny zhuanlan.zhihu.com ...

  7. Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架

    雷锋网 AI 科技评论编者按:近期,Google 开源了轻量级 AutoML 框架-- AdaNet,该框架基于 TensorFlow,只需要少量的专家干预便能自动学习高质量模型,在提供学习保证(le ...

  8. Google开源OCR项目Tesseract训练(自己训练的记录,未成功)

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 本文训练Tesseract用的方法主要参考文章  ...

  9. Google开源word2vec,文本相似度计算工具

    Google开源word2vec,文本相似度计算工具 谷歌已经使用Deep Learning技术开发了许多新方法来解析语言,目前,谷歌开源了一款基于Deep Learning的学习工具--word2v ...

最新文章

  1. 2010年终总结---戏说茅台酒涨价
  2. 高效开发 Android App 的 10 个建议(转)
  3. 记录一个Ubuntu的一个官方地址
  4. Exchange 2016异地容灾系列-Exchange部署(五)
  5. [Swift]LeetCode873. 最长的斐波那契子序列的长度 | Length of Longest Fibonacci Subsequence...
  6. Qt 断言的使用 Q_ASSERT
  7. linux makefile详解
  8. Spark 3.0 发布了,代码拉过来,打个包,跑起来!| 附源码编译
  9. Trick(十五)—— 树结构如何判断一个节点是内部节点(internal node)还是叶子节点(leaf node)
  10. ASP.NET程序中 抛出Thread was being aborted. 异常(转)
  11. mysql 中 where条件的OR 和 and 加括号的说法
  12. 清理了两位同事的机器,走人时要自行清理
  13. Visual Basic.Net连各种数据库的几种方法
  14. Vue+flvjs播放flv文件
  15. data-bi(3):大数据分析软件 CBoard有了一个另外的ui,vuejs写的
  16. ug产品摆正高级技巧_UG8.0工件怎么摆正角度教程?
  17. 白光led 计算机模拟,白光LED在TracePro中的建模及仿真
  18. 控制台接收信息转发_微信多群转播能够起到什么作用?微信群聊录制课程语音转发多群怎么操作?...
  19. 31位圈内大佬解读DApp困惑:“爆款”也难优秀!
  20. Eclipse打开资源管理器

热门文章

  1. typec扩展坞hdmi没反应_手机\笔记本使用Type-c扩展坞的问题解析
  2. 计算机网络与无线通信系统学习16:射频器件的基本参数
  3. 全球及中国医用管材行业十四五产销需求趋势展望报告2021-2027年版
  4. 《幼儿体适能》课程教学大纲
  5. IC学习笔记20——VCS的使用(一)仿真事件队列
  6. 苹果连接电脑 计算机不显示硬盘,解决方法:Mac Mac计算机无法识别的硬盘解决方案...
  7. 个人站长网站建设流程
  8. 【经验分享】EDDX文件及其打开软件EdrawSoft Edraw Max的下载和安装
  9. 欧姆龙CJ1W-SCU模块通过串口网关功能实现Modbus RTU通信
  10. 数据仓库架构的发展进程