为什么微信android图片质量会比iphone的差?

所属分类: 手机学院 / 手机知识 阅读数: 531
收藏 0 赞 0 分享
为什么微信android图片质量会比iphone的差?

我们团队最初也纠结过这个问题,费了半天劲、绕了好大圈,直到最后才发现,原来这是谷歌犯得一个“小”错误,而且一直错到了今天。

为什么微信android图片质量会比iphone的差?

谷歌的错就在于:libjpeg。

libjpeg是广泛使用的开源JPEG图像库(参考 http://en.wikipedia.org/wiki/Libjpeg ),安卓也依赖libjpeg来压缩图片。通过查看源码,我们会发现安卓并不是直接封装的libjpeg,而是基于了另一个叫Skia的开源项目(http://en.wikipedia.org/wiki/Skia_Graphics_Engine)来作为的图像处理引擎。Skia是谷歌自己维护着的一个大而全的引擎,各种图像处理功能均在其中予以实现,并且广泛的应用于谷歌自己和其它公司的产品中(如:Chrome、Firefox、Android等)。Skia对libjpeg进行了良好的封装,基于这个引擎可以很方便为操作系统、浏览器等开发图像处理功能。

libjpeg在压缩图像时,有一个参数叫optimize_coding,关于这个参数,libjpeg.doc有如下解释:

为什么微信android图片质量会比iphone的差?

这段话大概的意思就是如果设置optimize_coding为TRUE,将会使得压缩图像过程中基于图像数据计算哈弗曼表(关于图片压缩中的哈弗曼表,请自行查阅相关资料),由于这个计算会显著消耗空间和时间,默认值被设置为FALSE。

这段解释乍看起来没有任何问题,libjpeg的代码也经受了十多年的考验,健壮而高效。但很多人忽略了这一点,那就是,这段解释是十多年前写的,对于当时的计算设备来说,空间和时间的消耗可能是显著的,但到今天,这似乎不应再是问题,相反,我们应该更多的考虑图片的品质(越来越好的显示技术)和图片的大小(越来越依赖于云服务)。

谷歌的Skia项目工程师们最终没有设置这个参数,optimize_coding在Skia中默认的等于了FALSE,这就意味着更差的图片质量和更大的图片文件,而压缩图片过程中所耗费的时间和空间其实反而是可以忽略不计的。那么,这个参数的影响究竟会有多大呢?

经我们实测,使用相同的原始图片,分别设置optimize_coding=TRUE和FALSE进行压缩,想达到接近的图片质量(用Photoshop放大到像素级逐块对比),FALSE时的图片大小大约是TRUE时的5-10倍。换句话说,如果我们想在FALSE和TRUE时压缩成相同大小的JPEG图片,FALSE的品质将大大逊色于TRUE的(虽然品质很难量化,但我们不妨说成是差5-10倍)。

我们又对Android和iOS进行了对比(均使用标准的JPEG压缩方法),两个系统都没有提供设置optimize_coding的接口(通过阅读源码,我们已经知道Android是FALSE,iOS不详),当压缩相同的原始图片时,结果也是一样,iOS完胜。想要品质接近,文件大小就会差出5-10倍,而如果要压缩出相同大小的文件,Android的压缩品质简直就是惨不忍睹。

结果说明,苹果很清楚optimize_coding参数和哈弗曼表的意义,这里需要特别指出,苹果使用的哈弗曼表算法与libjpeg(及我们后来自行采用的libjpeg-turbo)不同,像素级可以看出区别,苹果似乎基于libjpeg又进行了进一步的优化,压缩出来的图片细节上更柔和、更平滑。

以上试验,我们尝试过多个原图、多种压缩比例,试验结果均类似,如有兴趣,您不妨也自行进行尝试。

最终我们决定,不再使用安卓系统原生的JPEG压缩方法,而是基于libjpeg-turbo自行编译了一版native的安卓库,专门用来压缩图片,这样在我们的产品中,就做到了仅仅用1/5的图片大小,就能让用户得到不逊色甚至更优的图片品质,对于我们团队来说,费了半天劲、绕了好大圈是非常值得的。(使用libjpeg-turbo还有性能上的好处,这里就不再赘述了)

更多精彩内容其他人还在看

千元机越来越优秀 为何购买更高价位手机产品的人反而多了?

旗舰手机产品逐渐获得消费者的欢迎并非没有理由的。按照现在的趋势下去,可能未来的某一天,千元内的手机产品真的会消失,不过那时,更高价位的产品也一定会给足我们选购它们的理由
收藏 0 赞 0 分享

MIUI开发版更新发布:有效减少卡顿变得更流畅

MIUI屏幕录制功能早在今年1月中旬便进入体验版,首批支持小米3、小米4、小米5、小米Note等机型使用。如今进入开发版,几乎支持小米所有机型使用,也将会有更多用户能够体验到这该功能,今天是星期五,小米也按照惯例发布了MIUI的开发版更新,详情我们来看看吧
收藏 0 赞 0 分享

安卓手机上误删的照片该如何找回?照片被误删找回的三个方法

有时我们会不小心将手机中的照片给删除掉,当再次查看该照片时发现为时已晚。那么安卓手机上误删的照片该如何找回?下面小编就为大家介绍照片被误删找回的三个方法,真的很实用,一起来学习吧
收藏 0 赞 0 分享

手机连接电脑后不显示可移动磁盘怎么办?

很多朋友反映手机连接电脑不显示可移动磁盘,应该怎么办?下面小编给大家带来解决方法,一起来看吧
收藏 0 赞 0 分享

魅族最新体验版固件Flyme6.7.4.11 beta更新哪些内容?

对于Flyme系统每次一更新,论坛中全是更新的帖子,可以说没更新时,抱怨怎么还不更新啊, 有系统时,也会抱怨我怎么就没收到推送啊等等情况,总之这是个不能让人百分百满意的结果。今日,魅族发布了Flyme 6的4月更新——最新体验版固件Flyme 6.7.4.11 beta,我们来看
收藏 0 赞 0 分享

为什么4GB安卓手机还没2GB的iPhone快?

随着这几年安卓手机的硬件快速升级,手机的运行内存也越来越大,从最初的512M到1GB,再到现在主流的2GB、3GB、4GB。那么为什么4GB安卓手机还没2GB的iPhone快?原来真相是这样,详情我们来看看吧
收藏 0 赞 0 分享

手机CPU天梯图2017年4月最新版: 手机处理器性能最新排名

如今手机CPU品牌型号非常之多,且时隔数月就会有不少新型号诞生,四月乐视新推出的乐Pro3双摄AI版又首发新的联发科Helio X23和联发科Helio X27处理器,因此联发科Helio X23和联发科Helio X27是本月发布的新款处理器,本文带来手机CPU天梯图2017年
收藏 0 赞 0 分享

OPPO相册拼图怎么玩 OPPO R9s手机相册拼图功能介绍

OPPO R9s作为国内第一拍照手机,深受大家喜爱,近日,有网友咨询小编OPPO相册拼图怎么玩,今天小编就为大家带来OPPO R9s手机相册拼图功能介绍,感兴趣的一起去看看吧
收藏 0 赞 0 分享

这么多600系列处理器到底有什么区别?9款骁龙600处理器大比拼

2013年的CES展会上,高通首次推出了全新系列的处理器:骁龙600,此款处理器为主频1.5-1.9GHz的Krait300架构4核,GPU为Adreno320,细细算来,6XX系列处理器已经推出了9款不同的型号,那么这么多600系列处理器到底有什么区别?下面为大家带来9款骁龙6
收藏 0 赞 0 分享

魅族Flyme 6稳定版更新频率调整:三个月一更新

如昨日预告,魅族今天正式发布了Flyme 6系统的最终稳定版本,并开始向支持机型全面推送。去年10月,魅族就曾宣布将Flyme 5体验版固件由每周更新改为双周更新,现在魅族Flyme 6稳定版更新频率调整为三个月一更新,来看看吧
收藏 0 赞 0 分享
查看更多