a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

安卓圖片反復壓縮后為什么普遍會變綠而不是其它顏色?

2019-10-21 21:33:55
字體:
來源:轉載
供稿:網友

業余版概要:

安卓的一個核心的部分的代碼,為了優化執行速度進行了魔改,結果寫錯了代碼。結果導致 JPG 圖片壓縮發綠、崩壞。與安卓上的應用無關,它們是受害者

專業版概要:

問題出在 Android 提供的壓縮圖片接口上,準確的說是一個 Android 里一個叫做 Skia 的庫上。而這個 bug 在 2016 年 4 月中旬被修復了,如果按照 Android 的發行來看,那就是從 Android 7 (Nougat) 開始才消除這個問題。

問題出在 RGB 色彩空間轉換到 YUV 的時候。但問題不僅僅是精度下降,最大的問題是,錯誤的舍入(向下取整)。

安卓,圖片,壓縮,變綠

現在就要說到 Android 系統到底為什么出了這個問題了。Android 系統自起誕生以來就引入了名為 Skia 的圖像庫(Google 自家產品),用于處理圖像,其中包括把圖片壓縮成 JPEG(平時說的 JPG)。而 Skia 又是調用libjpeg-turbo 來實現真正的壓縮過程的。為了達到更好的壓縮效果,JPEG 算法本身,將通常屏幕上表示顏色的 RGB(紅綠藍)數值,轉換為 YUV 數值(亮度,藍色分量,紅色分量)。正常情況下這個算法是輕微有損的。

但是 Skia 不走尋常路,在將這個變換算法的各個常數復制到自己的代碼里的時候(當然是合法地),降低了精度,以達到更高的速度(專業準確地說,從 16 位定點數,降低到了 8 位定點數),這導致了更大的損傷。

最可怕的是……在進行這個變換運算的最后一步,需要除以 256,而代碼中,采用了右移操作代替除法以提高執行速度。

假如我們是 Skia 開發者,如何修復這個問題?

交回給 libjpeg-turbo 庫自己來做色彩空間變換,把原本 Skia 庫 YUV 轉換代碼全部刪掉了,把這個過程留給整個過程最底層的 libjpeg-turbo庫自己來做,并且用默認的 JDCT_ISLOW 方法代替JDCT_IFAST 方法。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜视频91 | 欧美韩一区二区 | 欧美成人手机在线 | 在线播放国产视频 | 狠狠做深爱婷婷综合一区 | 亚洲三级网址 | 欧美日韩中文字幕 | 国产日韩欧美精品一区 | 欧美极品一区二区三区 | 欧美亚洲视频 | 欧美一二三四成人免费视频 | 99久久综合狠狠综合久久 | 欧美一区二区激情三区 | 日本一本视频 | 亚洲v日韩v综合v精品v | 久久国产成人 | 成人欧美一区二区三区黑人孕妇 | 欧美成视频 | 日韩中文在线播放 | 永久精品 | 成人免费观看网址 | 真实国产露脸乱 | 欧美精品欧美极品欧美激情 | 国产成人精品亚洲男人的天堂 | 最新av在线网址 | 羞羞视频在线免费 | 精品亚洲国产成av人片传媒 | 久久久高清视频 | 欧美大片在线看免费观看 | 日韩中文在线视频 | 日韩午夜 | 欧美一二三区 | 国产四虎 | 中文字幕在线视频网站 | 精品久久久久久久 | 超碰在线免费看 | 天天做天天爱天天综合网2021 | 精品国产一区二区三区久久久 | 久久99一区二区 | 美女主播精品视频一二三四 | 成人黄色免费视频网站 |