咱們在瀏覽網頁的時候,常常會看到一些網絡圖片由模糊變的清晰的過程。在android 開發中,咱們也會遇到這樣的需求。那麼這個是怎麼實現的呢?android
一,背景知識:git
技術標籤 關鍵字 Progressive JPEG。github
相關知識點:jpeg 的保存格式:(參考:安卓的漸進式jpeg)網絡
JPEG文件有兩種保存方式,分別是Baseline JPEG(標準型)和Progressive JPEG(漸進式)。兩種格式有相同尺寸以及圖像數據,擴展名也是相同的,惟一的區別是兩者顯示的方式不一樣。網站
- Baseline JPEG: 這種類型的JPEG文件存儲方式是按從上到下的掃描方式,把每一行順序的保存在JPEG文件中。打開這個文件顯示它的內容時,數據將按照存儲時的順序從上到下一行一行的被顯示出來,直到全部的數據都被讀完,就完成了整張圖片的顯示。若是文件較大或者網絡下載速度較慢,那麼就會看到圖片被一行行加載的效果
- Progressive JPEG: 文件包含屢次掃描,這些掃描順尋的存儲在JPEG文件中。打開文件過程當中,會先顯示整個圖片的模糊輪廓,隨着掃描次數的增長,圖片變得愈來愈清晰。這種格式的主要優勢是在網絡較慢的狀況下,能夠看到圖片的輪廓知道正在加載的圖片大概是什麼。在一些網站打開較大圖片時,有時就能看到圖片由模糊再到清晰的過程。
二,如何實現.net
- facebook 開源的圖片加載引擎依舊支持。地址:https://github.com/facebook/fresco
- 本身支持實現:參考地址:ProgressiveJpeg介紹與在Android中的使用
原理:將圖片文件中標記的每個完整圖像幀(由模糊到清晰)的圖像數據,直接渲染到視圖上。3d
3. 針對非progressive jpeg 的圖片,也有一次decode 出圖片,而後本身作模糊的方案。可是這樣對提高用戶體驗並無什麼好處。code