聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

5.0以下的主流圖片加載框架有哪些?安卓加載圖片四大框架

來源:CSDN 時間:2023-04-06 10:06:25

主流圖片加載框架?


(資料圖片)

1> Picasso

2> Glide

3> Fresco

4> ImageLoader

介紹:

Picasso:和Square的網絡庫一起能發揮最大作用,因為Picasso可以選擇將網絡請求的緩存部分交給了okhttp實現

Glide:模仿了Picasso的API,而且在他的基礎上加了很多的擴展(比如gif等支持),Glide默認的Bitmap格式是RGB_565,比 Picasso默認的ARGB_8888格式的內存開銷要小一半;Picasso緩存的是全尺寸的(只緩存一中),而Glide緩存的是跟ImageView尺寸相同的(即56*56和128*128是兩個緩存)。

Fresco:最大的又是在于5.0以下(最低2.3)的Bitmap加載。在5.0以下系統,Fresco將圖片放到一個特別的內存區域(Ashmem區)。當然,在圖片不顯示的時候,占用的內存會自動被釋放。這會使得APP更加流暢,減少因圖片內存占用而引發的OOM。為什么說5.0以下呢?因為在5.0系統以后系統默認就是存儲在Ashmem區了。

ImageLoader:旨在為圖像加載,緩存和顯示提供強大,靈活可定制的工具。他提供了大量的配置選項和良好的控制圖像加載和緩存過程。

下面簡單說一說這些框架的使用:

Picasso的基本使用:

將Picasso添加進項目后,只需一行就搞定:

Picasso.with(context).load(imageUrl).into(imageView);

1.自動將圖像緩存在本地;

2.通過圖片壓縮轉換以減少內存消耗

3.自動處理了ImageView的回收,即自動取消不在事業范圍內的ImageView視圖資源的加載;

Picasso裁剪:

Picasso.with(context).load(imageUrl).resize(50,50).centerCrop.info(imageView);

自定義格式轉換:

為了實現更多想要轉換的效果,可以自己實現一個Transformation接口的類,然后將其對象傳遞給transform()方法:

public class myTransformation implements Transformation{

@Override

public Bitmap transform(Bitmap source){

//對source實現自定義裁剪

}

@Override     

public String key(){

return "square()"

}

}

占位符圖片:

所謂的占位符圖像即當圖片為正常顯示時默認的圖片,通過placeholder()設置,Picasso也支持設置圖片顯示錯誤是顯示的默認圖片,通過error()設置

Picasso.with(context).load(imageUrl).placeholder(R.drawable.image_placeholder).error(R.drawable.image).into(imageView);

載入本地資源:

除了通過網絡下載圖片,Picasso也可以載入本地圖片資源:

Picasso.with(context).load(R.deawable.icon).into(imageView);

Picasso.with(context).load("file://android_asset/Android.png").into(imageView);

Picasso.with(context).load(new File(...)).into(imageView);

調試:為了方便調試,你可以通過測試Picasso的setIndicatiorEnabled(true);可以讓不同來源的圖片顯示一個不同的色彩標記

2.Glide最火圖片加載開源框架加載Gif資源到ImageView中

通常ImageView不能加載Gif圖片,如果不做任何處理的話,加載到ImageView中的Gif只顯示第一幀。網上大多方案都是借助Android的Movie,把gif圖片作為流,解析成Android Movie顯示,這些定制的基本思想就是線檢測圖片資源是否為Gif圖片,若是,則按照Android Movie解析之。

Glide,本身在圖片加載和緩存方面做得比較優秀,同時架子啊Gif圖也很方便,把需要加載的Gif圖片放到drawable目錄下,然后就和普通的ImageView設置一個圖片資源R.drawable.xx 一樣,很簡單?;蛘邚木W絡URL加載一個圖片,開發者不用關心這個圖片資源是否是gif還是其他jpg還是png等等格式,直接將其當做一個普通的圖片加載即可,

使用:

Glide.with(this).load(R.drawable.loading).into(imageView);

3.Fresco讓圖片的漸進式呈現的強大框架

Fresco中有個 image pipeline 的模塊,負責從網絡,從本地文件系統,本地資源加載圖片。為了最大限度節省空間和cpu時間,他含有3級緩存設計(2級內存,1級文件)

Fresco中設計有一個叫做Drawees模塊,方便地顯示loading圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間占用。

Fresco支持Android2.3及以上系統

特性

內存管理:

解壓后的圖片,即Bitmap,占用大量的內存。大的內存占用勢必會引發更加頻繁的GC。在5.0以下,GC將會顯著的引發界面卡頓。在5.0以下系統,Fresco將圖片放到一個熱別的內存區域。當然,在圖片不顯示的時候,占用的內存會自動釋放。這會使得APP更加流暢,減少因為圖片內存占用而引發的OOM。

Fresco在低端機器是上一樣出色,你再也不用因圖片內存占用而思前想后。

圖片的漸進式呈現:

漸進式的JPEG圖片格式已經流行數年了,漸進式圖片格式先呈現大致的圖片輪廓,然后UI隨著圖片下載的繼續,呈現逐漸清晰的圖片,這對于移動設備,尤其是網絡有幾大的利好,可帶來更好的用戶體驗。

Android本身的圖片庫不支持次格式,但是Fresco支持,使用是,和往常一樣僅僅需要提供一個圖片的URL即可.

GIF圖和WebP格式:

支持GIF,支持WebP格式

圖像的呈現:

Fresco的Drawees設計,帶來一些有用的特性:

自定義居中焦點(對人臉等圖片顯示非常有幫助)

元教徒,當然圓圈也行。

下載失敗后,點擊重新下載

自定義占位圖,自定義overlay,或者進度條

指定用戶按壓式的overlay

圖像的加載

Fresco的 image pipeline 設計,允許用戶在多方面控制圖片的加載:為同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片先顯示一個低解析度的圖片,等高清圖下載完之后在現實高清圖

加載完成回調通知

對于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖

縮放或者旋轉圖片

處理已下載的圖片

WebP支持

4.ImageLoader

特性:

多線程圖像加載(異步或者同步);

ImageLoader配置的廣泛定制(線程池,下載器,解碼器,內存和磁盤緩存策略,顯示圖像選項等);

每個顯示圖像調用的許多自定義選項(存根圖像,緩存開關,解碼選項,位圖處理和顯示等);

內存和/或磁盤上的圖像緩存(設備的文件系統或SD卡);

監聽加載過程(包括下載進度)

根據控件的大小對Bitmap進行裁剪,減少Bitmap占用過多的內存

較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片

提供在較慢的網絡下對圖片進行加載

5.Picasso,Fresco,Glide,ImageLoader優劣

Fresco:

優點:

1.圖片存儲在安卓系統的匿名共享內存,而不是虛擬機的堆內存中,圖片的中間緩沖數據也存放在本地堆內存,所以,應用程序有更多的內存使用,不會因為圖片加載而導致oom,同時也減少垃圾回收器頻繁回收Bitmap導致的界面卡頓,性能更高。

2.漸進式加載JPEG圖片,支持圖片從模糊到清晰加載

3.圖片可以以任意的中心店顯示在ImageView,而不僅僅是圖片的中心

4.JPEG圖片改變大小也是在native進行的,不是在虛擬機的堆內存,同樣減少OOM

5.很少的支持GIF圖片的顯示

缺點:

框架較大,影響APK體積

使用較繁瑣

ImageLoader,Picasso,Glide:這三者實現機制都差不多

ImageLoader:

比較老的框架,穩定,加載速度適中,缺點在于不支持GIF圖片加載,使用稍微繁瑣,并且緩存機制沒有和http的緩存很好的結合,完全是自己的一套緩存機制

Picasso:

使用方便,一行代碼完成加載圖片顯示,框架體積小

缺點在于不支持GIF,并且他可能是想讓服務器去處理圖片的縮放,他緩存的圖片是未縮放的,并且默認使用ARGB_8888格式緩存圖片,緩存體積大

Glide:

可以說是Picasso的升級版,有Picasso的優點,并且支持GIF圖片的加載,圖片緩存也會自動縮放,默認使用RGB_565格式緩存圖片,是Picasso緩存體積的一半

總結:

Picasso所能實現的功能,Glide都能做,無非是所需的設置不同。但是Picasso體積比起Glide小太多,如果項目中網絡請求本身用的就是okhttp或者retrofit(本質還是okhttp),那么建議用Picasso,體積會小很多。Glide的好處就是處理大型的圖片流,比如gif、Video,如果你們是做美拍、愛拍這種視頻類應用的話,建議使用Glide。

Freaso在5.0以下的內存優化非常好,代價就是體積也非常大,按體積算Fresco > Glide > Picasso

不過在使用起來也有些不便(建議:他只能用內置的一個ImageView來實現這些功能,用起來比較麻煩,我們通常是根據Fresco自己改改,直接使用它的Bitmap層)  

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线