業(yè)余版概要:
創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨嚒N覀儚牟缓鲇瞥踉L客戶,我們用心做好本職工作,不忘初心,方得始終。十多年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營(yíng)銷服務(wù)商,為您提供做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5高端網(wǎng)站建設(shè)、網(wǎng)站制作、高端網(wǎng)站設(shè)計(jì)、成都小程序開發(fā)服務(wù),給眾多知名企業(yè)提供過(guò)好品質(zhì)的建站服務(wù)。
安卓的一個(gè)核心的部分的代碼,為了優(yōu)化執(zhí)行速度進(jìn)行了魔改,結(jié)果寫錯(cuò)了代碼。結(jié)果導(dǎo)致 JPG 圖片壓縮發(fā)綠、崩壞。與安卓上的應(yīng)用無(wú)關(guān),它們是受害者
專業(yè)版概要:
問(wèn)題出在 Android 提供的壓縮圖片接口上,準(zhǔn)確的說(shuō)是一個(gè) Android 里一個(gè)叫做 Skia 的庫(kù)上。而這個(gè) bug 在 2016 年 4 月中旬被修復(fù)了,如果按照 Android 的發(fā)行來(lái)看,那就是從 Android 7 (Nougat) 開始才消除這個(gè)問(wèn)題。
問(wèn)題出在 RGB 色彩空間轉(zhuǎn)換到 YUV 的時(shí)候。但問(wèn)題不僅僅是精度下降,最大的問(wèn)題是,錯(cuò)誤的舍入(向下取整)。

現(xiàn)在就要說(shuō)到 Android 系統(tǒng)到底為什么出了這個(gè)問(wèn)題了。Android 系統(tǒng)自起誕生以來(lái)就引入了名為 Skia 的圖像庫(kù)(Google 自家產(chǎn)品),用于處理圖像,其中包括把圖片壓縮成 JPEG(平時(shí)說(shuō)的 JPG)。而 Skia 又是調(diào)用libjpeg-turbo 來(lái)實(shí)現(xiàn)真正的壓縮過(guò)程的。為了達(dá)到更好的壓縮效果,JPEG 算法本身,將通常屏幕上表示顏色的 RGB(紅綠藍(lán))數(shù)值,轉(zhuǎn)換為 YUV 數(shù)值(亮度,藍(lán)色分量,紅色分量)。正常情況下這個(gè)算法是輕微有損的。
但是 Skia 不走尋常路,在將這個(gè)變換算法的各個(gè)常數(shù)復(fù)制到自己的代碼里的時(shí)候(當(dāng)然是合法地),降低了精度,以達(dá)到更高的速度(專業(yè)準(zhǔn)確地說(shuō),從 16 位定點(diǎn)數(shù),降低到了 8 位定點(diǎn)數(shù)),這導(dǎo)致了更大的損傷。
最可怕的是……在進(jìn)行這個(gè)變換運(yùn)算的最后一步,需要除以 256,而代碼中,采用了右移操作代替除法以提高執(zhí)行速度。
假如我們是 Skia 開發(fā)者,如何修復(fù)這個(gè)問(wèn)題?
交回給 libjpeg-turbo 庫(kù)自己來(lái)做色彩空間變換,把原本 Skia 庫(kù) YUV 轉(zhuǎn)換代碼全部刪掉了,把這個(gè)過(guò)程留給整個(gè)過(guò)程最底層的 libjpeg-turbo庫(kù)自己來(lái)做,并且用默認(rèn)的 JDCT_ISLOW 方法代替JDCT_IFAST 方法。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
本文題目:安卓圖片反復(fù)壓縮后為什么普遍會(huì)變綠而不是其它顏色?
網(wǎng)址分享:http://www.chinadenli.net/article24/iiihje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站、外貿(mào)建站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)