Android Bitmap 全面解析(四)圖片處理效果對比 ...

來源:互聯網
上載者:User

標籤:android   c   style   class   a   http   

對比對象: UIL Volley 官方教程中的方法(此系列教程一裡介紹的,ImageLoader的處理方法和官方的差不多)
------------------------------------------------------------------------
首先單張圖片的壓縮處理,也是分析重點專門擼了一個小demo(結尾會放出下載串連)將對應計算方法copy了出來,然後計算了幾十組資料,進行了對比原圖寬高都是一個10000以內的隨機整數,限定大小是400 200,然後進行壓縮處理,記錄了10組資料如下 
控制項縮放類型FIT_INSIDE和CROP在教程三-1的UIL架構分析中有詳細說明,這裡再簡單說下FIT_INSIDE是預設控制項顯示類型,圖片會完整的顯示在控制項內,不一定會填滿控制項CROP是使圖片填充整個控制項,圖片可能會顯示不全具體效果大家可以在android項目裡建一個imageview不設定縮放類型(即FIT_INSIDE效果), 再建一個scaleType為CROP的同大小控制項,然後顯示同一張圖片,就會看出來區別了

官方/volley/imageloader都沒有對縮放類型做區別處理,所以不同縮放類型下,最終壓縮圖片是一個size結果我們也可以明顯看出官方演算法是和UIL的CROP類型時結果一樣的,實質上作用是保證壓縮後圖片寬高都要大於等於限定寬高,Volley的那種對限定值的特殊處理方式,則實質上最終的效果是讓壓縮後的圖片寬高任意一個大於等於限定寬高即可,則對應UIL的FIT_INSIDE效果

哪種好呢?(只針對圖片的壓縮處理而言)UIL我們已經長篇詳細的分析過了(教程系列三-1),對於縮放類型的處理是十分準確的,明顯是最好的~(這麼多人用不是沒道理的)那對比起來,官方的處理和Volley的則各有不足了~
官方=UIL CROP 即官方的處理方法其實更適合於CROP縮放類型的圖片顯示然而在處理寬高比差別較大的圖片時,如果是FIT_INSIDE顯示模式,則會造成壓縮圖片略大,雖然能保證顯示品質,但是浪費小部分記憶體資源比如中的第一組資料,664 3640的壓縮結果,明顯和我們所需的400 200差別過大- - 腦補一下大概就是火柴盒跟西瓜刀吧(不是太準確~)
Volley=UIL FIT_INSIDE 則代表Volley更適合預設情況下的圖片顯示情況了那麼在處理寬高比差別過大的圖片時,如果是CROP縮放類型,則壓縮大小看起來是差不多了,但實際上顯示效果是無法達到預期的,大小我們可以從size數值上看出來,顯示效果我還是弄個實際圖片大家對比看看吧(可以在文章末尾下載demo項目)

喪心病狂的找了個微博長圖實驗,項目一共四個ImageView控制項,上面倆是Volley,下排是UIL,左邊倆是FIT_INSIDE效果,右邊則是CROP而我說的Volley在過大寬高差時,用CROP類型顯示無法達到預期品質的效果,就是右上方這個圖了,簡直就是我不戴眼鏡看世界滴樣子對比下,UIL在處理CROP情況時效果十分有保障~ 
上面缺點都有個條件寬高比差別過大,因為大部分情況下,原圖的寬高比是比較穩定的,而我們限定值也都是差不多的,大部分情況都是設為一個正方形的限定大小,原圖基本也都是接近正方形的矩形~這就解釋了為什麼大部分的圖片框架包括官方教程中都沒有專門對不同縮放類型做區分處理,因為一般情況下,即長寬比穩定差別不大的情況下,官方的那種簡單處理都是適用滴參考上面資料我們也可以得出,當原圖長寬比和限定長寬比越相近,則兩種不同演算法(官方和UIL的CROP是一種,Volley和UIL的FIT_INSIDE是另一種)的區別越小,當原圖和限定值的長寬比十分相似甚至相等時,那兩種演算法最終的結果就一樣了(比如資料中紅色加粗的部分)而我們看長寬比差別較大的第一組資料和倒數第二組資料,兩種演算法的差別直接是2^4=16倍~大家有興趣可以自行嘗試,弄幾個更大比例的特殊值試一試
------------------------------------------------------------------------
圖片色彩樣式對比Volley寫死了是RGB_565ImageLoader沒有設定,那應該就是預設的ARGB_8888UIL提供設定API,預設則也是ARGB_8888
------------------------------------------------------------------------
緩衝池對比Volley只有介面...執行個體類都沒有,不過寫起來也很簡單ImageLoader則主要是單強引用,單軟引用兩種UIL提供了8種類型,弱和強,單獨以及混合的,包括不同的演算法
區別就在於軟引用和弱引用的不同,這個直接看教程二裡面針對不同參考型別的介紹就行了,也可以自行百度搜,其實兩者區別不大強引用部分也都差不多,即使使用了最新的LruCache類,其實看源碼我們也會發現內部還是用LinkedHashMap實現的
------------------------------------------------------------------------


綜上,肯定是UIL完全勝出了,還有很多拓展功能部分也都是UIL更加強大沒跑了
不過Volley架構我們之前也說過了,雖然功能不夠完善,但十分適合我們二次開發
ImageLoader嗎,稍微簡單點,可以當學習源碼的小練手來用


------------------------------------------------------------------------
最後滴最後,demo簡單介紹下drawable包下有一個長寬比很大的微博長圖,還有一個正常的接近正方形的圖,代碼只有一個類,裡面把幾種壓縮演算法都貼出來了,測試方法也已經寫好,大家可以自行修改數值計算,也可以拷貝一些圖片進去看其他比例圖片的效果布局檔案對應也只有一個,裡面放了4個imageView,倆普通的,倆center_crop的,也就是對應的CROP縮放類型,控制項縮放類型和UIL架構縮放類型的對應關係,參考教程三-1的UIL介紹裡

足夠多豆子滴直接下載,不夠的可以回複顯示網盤,地址失效時可以私信聯絡我

遊客,如果您要查看本帖隱藏內容請回複


---------------------------------------------------------------------------


系列連結Android Bitmap 全面解析(一)載入大尺寸圖片 
http://www.eoeandroid.com/thread-331669-1-1.html

Android Bitmap 全面解析(二)載入多張圖片的緩衝處理
http://www.eoeandroid.com/thread-332399-1-1.html

Android Bitmap 全面解析(三)開源圖片框架分析1-UIL(上)
http://www.eoeandroid.com/thread-333220-1-1.html

Android Bitmap 全面解析(三)開源圖片框架分析1-UIL(下)
http://www.eoeandroid.com/thread-333229-1-1.html Android Bitmap 全面解析(三)開源圖片框架分析2-ImageLoader和Volleyhttp://www.eoeandroid.com/thread-334315-1-1.html Android Bitmap 全面解析(四)圖片處理效果對比http://www.eoeandroid.com/thread-334752-1-1.html



--------------------------------------------------------------------------- 

(完結撒花)
此系列結束,評論我大部分都會看,有問題的地以會重新編輯修改文章完善一下
還有一個Volley二次封裝,估計篇幅會過大,以後可能新開系列貼,希望大家多多支援


全部原創,所以轉載希望能註明出處,還作者資訊: BoreDream 意譯 般若夢  音譯 爆菊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.