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

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

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

小米2怎么传文件 解决小米手机不能连接电脑传文件问题

购买小米手机2后,发现了一个很悲催的问题:无法与电脑连接传文件,把相关的驱动更换后依然还是不行啊,更换电脑也是如此;现在我把安装过程拍下来,让那些还不能成功在XP下传文件的解决问题,感兴趣的你可以了解下
收藏 0 赞 0 分享

如何删除sd卡分区 已有sd卡分区怎么删除图文教程

已有sd卡分区怎么删除,很多的新手朋友们对此还是比较陌生的;手机内存不够安装软件怎么办?想开SWAP怎么办?答案就是果断分区,可是分区之后如何删除分区呢?今天,我就来交大家如何删除分区,高手勿喷
收藏 0 赞 0 分享

12306抢票怎么抢票 电话怎么技巧操作教程

春节想回趟家抢购火车票真实不容易了。一般按照常规操作根本没那么快,基本抢不到票!下面本文与大家分享一个目前比较火的12306电话抢票技巧,感兴趣的朋友可以了解一下哦
收藏 0 赞 0 分享

K860i怎么样 联想k860i好用吗及优缺点介绍

联想在2012年底并不满足于此,推出了联想K860的升级版K860i,主要在处理器以及内存方面有不少提升,系统方面也作出右了升级,报价仅为2288元,性价比更出色,下面我们一起来看看这款联想K860i怎么样吧,感兴趣的朋友可以了解下啊,希望对你有所帮助
收藏 0 赞 0 分享

nfc 公交卡 手机NFC功能妙用读取公交卡信息实战分享

目前NFC还并没有完全的融入到我们的日常生活 里,以致于很多朋友除了数据传输外,并不清楚手机NFC技术具体还能够做哪些事情?所以我们今天除了介绍其基本功能外,还会通过实际的操作让大家来了解NFC技术,感兴趣的朋友可以了解下,希望本文可以帮助到你
收藏 0 赞 0 分享

手机连接电脑只显示充电的原因分析及解决方法

最近网友问的比较多的:手机连接电脑只显示充电怎么回事啊?对于此类问题,其实原因也比较简单,只要大家了解排查问题的方法即可找到原因,然后对应解决即可,小编利用闲暇时间整理了一些实用的解决方法可供大家参考,按兴趣的朋友可以了解下哦,希望本文对你有所帮助
收藏 0 赞 0 分享

安卓adb驱动安装 安卓安装ADB驱动过程分享

手机与电脑相连时需要安装驱动的,一般安卓手机设备连接电脑是无需安装驱动的,一般会自动安装,以下介绍下以前一HTC手机安装ADB驱动的方法,感兴趣的朋友可以了解下,希望本文对你有所帮助
收藏 0 赞 0 分享

itunes11怎么同步应用程序(挖掘隐藏的选项)

很多朋友应用都发现升级了iTunes11后原来版本里“同步应用程序”这个选项没有了,那么itunes11怎么同步应用程序呢?针对这个问题,小编基于正确的解答,感兴趣的朋友可以了解下,或许对你有所帮助
收藏 0 赞 0 分享

wp7手机WIFI热点与蓝牙等热门功能设置方法

不少朋友在使用Windows Phone手机总会一开始找不到相关设置功能哪,比如大家最常问的wifi无线网络设置与蓝牙设置等,下面本文将为大家介绍Windows Phone手机如何设置WIFI与蓝牙等热门功能,感兴趣的朋友可以了解下啊,或许有所帮助
收藏 0 赞 0 分享

ipad贴膜教程 ipad贴膜技巧[图文]

虽然很多人都坚持认为给 iPad 贴膜属于暴殄天物,的确,苹果给iPad 配备的屏幕足以抵抗一般的磨损,包括钥匙刮都不会有大问题。但是也有很多一部分朋友觉得不贴膜总觉得不放心,害怕心爱的iPad 留下难看的划痕。今天我们就教大家如何完美的给iPad 贴膜
收藏 0 赞 0 分享
查看更多