Google Guetzli是如何压缩图片的?
你可能已经知道,现在网页文件的平均大小比Doom游戏的安装文件还还大。
文件变大的原因之一是图片的增加,并且还需要支持更高的分辨率。
Google来拯救了
Google刚刚发布了一种新的JPEG压缩算法:Guetzli。该算法的主要思想是重点保留人眼可以轻松识别的细节,同时跳过眼睛无法注意的细节。
我不是专家,但预期的结果是获得一个感知质量相同,但文件大小更小的图像。
这不是一种新的图像格式,而是一种压缩JPEG图像的新方法。这意味着不需要一个定制的图像查看器,而是可以由任何一个能渲染JPEG的软件来显示。
现实生活中Guetzli
在我的一个项目中,有一个包含很多图片的主页(仅主页就有大约30Mb,其中27M是图片)。
我决定给Guetzli一个尝试的机会,为了说服我们的产品所有者和设计师质量损失是可以接受的,我试着把这个新的算法应用在一张没有使用的高分辨率的图片上(一张8574×5715,22MB的JPEG图片) 。
它崩溃了。
根据google所说(并且我的经验证实了这些数字),Guetzli每一百万像素的图像大约需要占用300MB的内存(因此,我的图像大约需要15GB),而当时我没有这么大的内存(六个节点服务器,两个docker容器,chromium和几个electron实例所占用的内存使得我的电脑不符合要求)。
在清理了一些不重要的进程之后,我重新试了一次,Guetzli占用了12GB的内存,但是成功了。
Google还表示,Guetzli处理一张图片每一百万像素大概需要一分钟的时间,我差不多也花了这么多时间(总时间略超过40分钟)。
压缩后的图像不到7MB(原始大小为22MB),我无法通过肉眼来确定哪个是压缩过的(我们的设计师可以,但是承认差异“小到令人难以置信”)。
6.9M home-guetzli.jpg
22M home-raw.jpg
我使用的是Guetzli默认的品质设置(从84到100,如果要低于84,你需要自己编译并更改这个最小值)进行的压缩。
更多的测试以及一些成功的例子
然后,我决定为该图像尝试使用不同的品质设置(我写了一个非常简单的脚本,从而无需每40分钟重新启动一次,并且在我睡觉的时候也能够运行)。
结果在这里(Guetzli的默认品质因素似乎是95)。
6.9M ./home-guetzli.jpg
22M ./home-raw.jpg
3.0M ./home-raw.http://www.yuheng119.com/ jpg.guetzli84.jpg
3.4M ./home-raw.jpg.guetzli87.jpg
4.2M ./home-raw.jpg.guetzli90.jpg
5.5M ./home-raw.jpg www.huazhyyule99.cn .guetzli93.jpg
8.8M ./home-raw.jpg.guetzli96.jpg
18M ./home-raw.http://www.acnet.cn/ jpg.guetzli99.jpg
产品所有者和设计师均同意使用84这个品质因素。然后我转换了所有的图片,我们从主页从30MB变为不到8MB(其中3MB是CSS和脚本)。
应该注意到的是,我们的图片之前并没有进行任何形式的压缩。
附加说明
在我的机器上安装Guetzli很顺利(有人在archlinux上创建了一个包含Guetzli的AUR包,非常感谢这个人),并且可以直接运行它(只要你拥有足够的内存)。
似乎还有一个brew包(针对Mac OS用户),但是我没有测试它。
对于超大的图片,Guetzli需要占用大量的内存和CPU时间(很多时候是相对的,不要指望着在运行的时候能够做其他事情)。如果RAM不是你的瓶颈,那你甚至可以考虑针对不同的图片并行运行多个Guetzli实例,因为它仅占用一个核心(仅作为写入)。
作为一个JPEG编码器,它不能输出PNG(因此没有透明度),但它可以转换和压缩PNG图片。
运行效率与图片的初始质量有关:我注意到压缩比范围大约为大图像上的7倍到小图像上的2倍之间。在小图片上,质量损失也更加明显。
在少数情况下,我也发现色饱和度存在损失(在我这个案例中,这个是可以接受的)。
长话短说
给Guetzli一个尝试,它可能会给你一个不可接受的结果(特别是低品质),但它也会让你的网站减少几MB的大小。
Google Guetzli是如何压缩图片的?的更多相关文章
- 使用Google Thumbnails 压缩图片
背景说明:最近项目中需要用到一些图片文件的上传 ,但是有些图片很大,比如轮播图,大有的有几兆,这样加载一个首页都要很久,显然这样对用户体验是非常不友好的,对服务器资源将是一种浪费. 为了解决这个问题, ...
- Joomla - 优化(时区、google字体、压缩图片、压缩自定义代码)
Joomla - 优化(时区.google字体.压缩图片.压缩自定义代码) 一.时区 发布文章是往往会发现发布时间和当前时间对不上,原因是 Joomla 用的是国际标准时间,和中国时区大约相差8小时, ...
- 四:Java使用google的thumbnailator工具对图片压缩水印等做处理
Thumbnailator是一个非常好的图片开源工具 使用方法: 在pom中加入以下jar包 <!-- 图片缩略图 图片压缩 水印 start--> <dependency>& ...
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...
- 移动端使用localResizeIMG4压缩图片
移动h5开发避免不了上传图片,一般我们使用html自带的控件input或者使用微信上传API.但微信上传API不是任何地方都可以使用的,使用html自带的控件input上传又免不了图片体积太大,上传不 ...
- java 上传图片 并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- 用gulp-imageisux智图api压缩图片
➣ 智图平台是什么? 智图是腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台,其功能包括针对png,jpeg,gif等各类格式图片的压缩,以及为上传图片自动选择最优的图片格式.同时, ...
- java 上传图片 并压缩图片大小(转)
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- word转html 压缩图片网站
word转html https://docs.google.com/document/d/1MS-os1NcEPSEe2OWRenGR_6CsEmEQUchoQoh-abmL1Y/edit 压缩图片 ...
随机推荐
- php和mysql连接方式(短 长 池)
一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...
- Agc017_E Jigsaw
传送门 题目大意 有$n$块拼图,每一块都由左中右三个部分组成,每块拼图中间部分是高为$H$的长方形,对于第$i$块品推左侧是高为$A_i$距离底部为$C_i$的长方体,右侧是高位$B_i$距底部为$ ...
- 【LeetCode】019. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- Tomcat配置MySql连接池问题
配置过程如下: 1.修改Tomcat—>conf目录下的context.xml文件 <Context path="/DBTest" docBase="DBTe ...
- #include <deque>
deque \(deque\)头文件主要包括一个双端队列容器.是一个支持在两端插入两端删除的线性储存空间,与vector和queue相似.与\(vector\)比起来,\(deque\)可以在\(O( ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- JAVA 1.5 并发之 Executor框架 (二)execute VS submit
http://www.cnblogs.com/rockman12352/p/3788688.html 上一篇对于整体框架讲了很多东西,但是具体在使用时有一些细节并没有说出来 首先是执行任务 execu ...
- 通过设置swift中container的ACL提供匿名访问及用户授权读取服务
在上层使用swift提供的云存储服务的过程中,提出了无需验证的使用需求. 在参考了:http://my.oschina.net/alanlqc/blog/160196(curl命令操作) 官方文档: ...
- JSP标签和EL表达式
1.jsp标签: sun原生的,直接jsp使用 <jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp&quo ...
- varnish安装和配置
实验环境:CentOS7 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器. #varnish服务器:172.16.252.142 [root@varnish localhost]#yu ...