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

所属分类: 手机学院 / 手机知识 阅读数: 494
收藏 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还有性能上的好处,这里就不再赘述了)

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

Android使用量份额首超iOS 距离全面胜利仅差一步

根据来自Net application最新的调查数据显示,今年7月搭载Android系统的智能手机、平板电脑设备的使用量份额从6月份的43.75%上升至44.62%,iOS系统则相应的从45.61%下降到44.19%。Android系统的设备使用量首次超越iOS系统设备iphon
收藏 0 赞 0 分享

cortana对比siri Cortana小娜真机体验评测

微软为Cortana起了个更符合中国国情的中文名字——“小娜”。对于中国用户来说,或许由于暂时还没有亲身感受到“小娜”的魅力,所以目前来看对其感觉还是相对陌生的。那么,下面我们就先和大家一起分享一下小娜到底是什么样子
收藏 0 赞 0 分享

怎样查询小米订单号?查询小米订单号的方法

抢购到小米手机后,小米手机订单号怎样查询,一起来看看吧
收藏 0 赞 0 分享

盘点世界上最早的智能手机设备有哪些

智能手机在过去这些年里经历了快速的增长。“智能手机”这个词直到90年代才首次出现,而最早那批产品在功能上也非常有限,虽然非常原始,但这些设备为现代智能手机的发展扫清了道路。想知道智能手机的先辈们是什么样子的?
收藏 0 赞 0 分享

小米手机4来了,小米手机5还会远吗?据传小米5工程机已基本定型

微博上业界知名人士曝出,小米5目前已经在P2阶段了,也就是说其第二阶段工程机已经出现。这意味着小米5的设计应该已经基本定型,如果没有什么重大设计缺陷,后续工程机应该都是小修小补。
收藏 0 赞 0 分享

wp8.1 gdr1如何更新?wp8.1 gdr1更新升级方法

wp8.1 gdr1怎么更新?小编将在下文告诉大家wp8.1 gdr1更新升级教程,微软正式推送了WP8.1 GDR1的更新,如果你是WP用户的话不妨升级体验一下这个新系统吧
收藏 0 赞 0 分享

wp8.1 gdr1应用园地怎么设置? 应用园地设置教程

应用园地是wp8.1 gdr1升级后附带的新功能,或许还有很多朋友都不知道怎么使用应用园地。今天小编就给大家分享wp8.1 gdr1应用园地设置教程,我们一起来看看
收藏 0 赞 0 分享

iPhone掉水里怎么办 iPhone进水怎么处理教程

不小心手机掉水里了,尤其是iPhone手机没有防水功能,那这时该怎么办呢?今天小编为大家总结了iPhone进水进水解救教程,想要知道iPhone进水怎么处理可以来参考下
收藏 0 赞 0 分享

旧手机成隐私炸弹 怎样合理卖出旧手机避免隐私泄露呢

据资料显示,2014年换机用户达到了手机出货量的一半,即有上亿台手机被淘汰。这些被淘汰的手机大多数被转卖回收。然而,这些旧手机中含大量个人信息、通讯录、账号等重要隐私信息,那么,该如何合理卖出旧手机,避免隐私泄露?
收藏 0 赞 0 分享

手机电池爆炸频繁太恐怖 如何才能安全的使用手机

平时有看新闻的朋友都应该都看过关于手机爆炸的消息,一些可能就只是把手机给弄坏了,而严重的有把手给炸伤的,甚至还有因为手机爆炸而丧命的。那么如何才能安全的使用手机?下面小编为大家详细介绍手机爆炸的原因及注意事项,希望对大家有所帮助
收藏 0 赞 0 分享
查看更多