欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

為什么微信android圖片質(zhì)量會(huì)比iphone的差?

  發(fā)布時(shí)間:2014-08-29 10:58:48   作者:佚名   我要評論
在微信中發(fā)送各種圖片,很多人會(huì)覺得iphone的圖片比安卓的圖片好太多,為什么微信android圖片質(zhì)量會(huì)比iphone的差?下面小編就來為大家解釋解釋。
為什么微信android圖片質(zhì)量會(huì)比iphone的差?

我們團(tuán)隊(duì)最初也糾結(jié)過這個(gè)問題,費(fèi)了半天勁、繞了好大圈,直到最后才發(fā)現(xiàn),原來這是谷歌犯得一個(gè)“小”錯(cuò)誤,而且一直錯(cuò)到了今天。

為什么微信android圖片質(zhì)量會(huì)比iphone的差?

谷歌的錯(cuò)就在于:libjpeg。

libjpeg是廣泛使用的開源JPEG圖像庫(參考 http://en.wikipedia.org/wiki/Libjpeg ),安卓也依賴libjpeg來壓縮圖片。通過查看源碼,我們會(huì)發(fā)現(xiàn)安卓并不是直接封裝的libjpeg,而是基于了另一個(gè)叫Skia的開源項(xiàng)目(http://en.wikipedia.org/wiki/Skia_Graphics_Engine)來作為的圖像處理引擎。Skia是谷歌自己維護(hù)著的一個(gè)大而全的引擎,各種圖像處理功能均在其中予以實(shí)現(xiàn),并且廣泛的應(yīng)用于谷歌自己和其它公司的產(chǎn)品中(如:Chrome、Firefox、Android等)。Skia對libjpeg進(jìn)行了良好的封裝,基于這個(gè)引擎可以很方便為操作系統(tǒng)、瀏覽器等開發(fā)圖像處理功能。

libjpeg在壓縮圖像時(shí),有一個(gè)參數(shù)叫optimize_coding,關(guān)于這個(gè)參數(shù),libjpeg.doc有如下解釋:

為什么微信android圖片質(zhì)量會(huì)比iphone的差?

這段話大概的意思就是如果設(shè)置optimize_coding為TRUE,將會(huì)使得壓縮圖像過程中基于圖像數(shù)據(jù)計(jì)算哈弗曼表(關(guān)于圖片壓縮中的哈弗曼表,請自行查閱相關(guān)資料),由于這個(gè)計(jì)算會(huì)顯著消耗空間和時(shí)間,默認(rèn)值被設(shè)置為FALSE。

這段解釋乍看起來沒有任何問題,libjpeg的代碼也經(jīng)受了十多年的考驗(yàn),健壯而高效。但很多人忽略了這一點(diǎn),那就是,這段解釋是十多年前寫的,對于當(dāng)時(shí)的計(jì)算設(shè)備來說,空間和時(shí)間的消耗可能是顯著的,但到今天,這似乎不應(yīng)再是問題,相反,我們應(yīng)該更多的考慮圖片的品質(zhì)(越來越好的顯示技術(shù))和圖片的大小(越來越依賴于云服務(wù))。

谷歌的Skia項(xiàng)目工程師們最終沒有設(shè)置這個(gè)參數(shù),optimize_coding在Skia中默認(rèn)的等于了FALSE,這就意味著更差的圖片質(zhì)量和更大的圖片文件,而壓縮圖片過程中所耗費(fèi)的時(shí)間和空間其實(shí)反而是可以忽略不計(jì)的。那么,這個(gè)參數(shù)的影響究竟會(huì)有多大呢?

經(jīng)我們實(shí)測,使用相同的原始圖片,分別設(shè)置optimize_coding=TRUE和FALSE進(jìn)行壓縮,想達(dá)到接近的圖片質(zhì)量(用Photoshop放大到像素級逐塊對比),F(xiàn)ALSE時(shí)的圖片大小大約是TRUE時(shí)的5-10倍。換句話說,如果我們想在FALSE和TRUE時(shí)壓縮成相同大小的JPEG圖片,F(xiàn)ALSE的品質(zhì)將大大遜色于TRUE的(雖然品質(zhì)很難量化,但我們不妨說成是差5-10倍)。

我們又對Android和iOS進(jìn)行了對比(均使用標(biāo)準(zhǔn)的JPEG壓縮方法),兩個(gè)系統(tǒng)都沒有提供設(shè)置optimize_coding的接口(通過閱讀源碼,我們已經(jīng)知道Android是FALSE,iOS不詳),當(dāng)壓縮相同的原始圖片時(shí),結(jié)果也是一樣,iOS完勝。想要品質(zhì)接近,文件大小就會(huì)差出5-10倍,而如果要壓縮出相同大小的文件,Android的壓縮品質(zhì)簡直就是慘不忍睹。

結(jié)果說明,蘋果很清楚optimize_coding參數(shù)和哈弗曼表的意義,這里需要特別指出,蘋果使用的哈弗曼表算法與libjpeg(及我們后來自行采用的libjpeg-turbo)不同,像素級可以看出區(qū)別,蘋果似乎基于libjpeg又進(jìn)行了進(jìn)一步的優(yōu)化,壓縮出來的圖片細(xì)節(jié)上更柔和、更平滑。

以上試驗(yàn),我們嘗試過多個(gè)原圖、多種壓縮比例,試驗(yàn)結(jié)果均類似,如有興趣,您不妨也自行進(jìn)行嘗試。

最終我們決定,不再使用安卓系統(tǒng)原生的JPEG壓縮方法,而是基于libjpeg-turbo自行編譯了一版native的安卓庫,專門用來壓縮圖片,這樣在我們的產(chǎn)品中,就做到了僅僅用1/5的圖片大小,就能讓用戶得到不遜色甚至更優(yōu)的圖片品質(zhì),對于我們團(tuán)隊(duì)來說,費(fèi)了半天勁、繞了好大圈是非常值得的。(使用libjpeg-turbo還有性能上的好處,這里就不再贅述了)

相關(guān)文章

最新評論