Android圖片性能優(yōu)化詳解
1. 圖片的格式
目前移動端Android平臺原生支持的圖片格式主要有:JPEG、PNG、GIF、BMP、和WebP(自從Android 4.0開始支持),但是在Android應(yīng)用開發(fā)中能夠使用的編解碼格式只有三種:JPEG、PNG、WebP,圖片格式可以通過查看Bitmap類的CompressFormat枚舉值來確定。
public static enum CompressFormat {
JPEG、
PNG、
WebP;
private CompressFormat() {
}
}
如果要在應(yīng)用層使用GIF格式圖片,那么需要自己引用第三方函數(shù)庫進(jìn)行支持。
1.1 JPEG
JPEG是一種廣泛使用的有損壓縮圖像標(biāo)準(zhǔn)格式,它不支持透明和多幀動畫,一般攝像類作品最終都是以JPEG格式展示。通過控制壓縮比,可以調(diào)整圖片的大小。
1.2 PNG
PNG是一種無損壓縮圖片格式,它支持完整的透明通道,從圖像處理領(lǐng)域?qū)ⅲ琂PEG只有RGB三個通道,而PNG有ARGB四個通道。由于是無損壓縮,因此PNG圖片占用空間一般比較大,會無形中增加最終APP的大小,在做APP瘦身時一般都要對PNG圖片進(jìn)行處理以減小其占用的體積。
1.3 GIF
GIF是一種古老的圖片格式,它誕生于1987年,它的特點(diǎn)是支持多幀動畫。
1.4 WebP
WebP由Google在2010年發(fā)布,它支持有損和無損壓縮、支持完整的透明通道、也支持多幀動畫,是一種比較理想的圖片格式。在既保證圖片質(zhì)量又要限制圖片大小的需求下,WebP應(yīng)該是首選。
2. 圖片的壓縮
目前大多數(shù)APP都是PNG格式圖片資源,我們可以通過幾個工具對PNG圖片進(jìn)行壓縮來達(dá)到瘦身的目的。
2.1 無損壓縮ImageOptim
ImageOptim是一個無損的壓縮工具,它通過優(yōu)化PNG壓縮參數(shù),移除冗余元數(shù)據(jù)以及非必需的顏色配置文件等方式,在不犧牲圖片質(zhì)量的前提下,既減少了PNG圖片占用的空間,又提高了加載的速度。
2.2 有損壓縮ImageAlpha
ImageAlpha是ImageOptim作者開發(fā)的一個有損的PNG壓縮工具,相比較而言,圖片大小得到極大的降低,當(dāng)然圖片質(zhì)量同事也會受到一定程度的影響,經(jīng)過該工具壓縮的圖片,需要經(jīng)過設(shè)計師的確認(rèn)才能最終上線,否則可能回影響整個APP的視覺效果。
2.3 有損壓縮TinyPNG
TinyPNG也是比較知名的有損PNG壓縮工具,它以Web站點(diǎn)的形式提供,沒有獨(dú)立的APP安裝包,同所有的有損壓縮工具一樣,經(jīng)過壓縮的圖片,需要經(jīng)過設(shè)計師的確認(rèn)才能最終上線,否則可能回影響整個APP的視覺效果。
還有很多無損壓縮工具,例如JPEGMini、MozJPEG等,大家自行選擇適合自己項(xiàng)目的一個就行,主要是在圖片大小和圖片質(zhì)量之間找到一個折中點(diǎn)。
2.4 PNG/JPEG 轉(zhuǎn)換為WebP
如果你的APP最低支持到Android4.0,那么可以直接使用系統(tǒng)提供的能力來支持WebP,如果是4.0以下的系統(tǒng),也可以通過在APP中集成第三方函數(shù)庫例如webp-android-backport來實(shí)現(xiàn)對WebP的支持。根據(jù)Google測試,無損壓縮后的WebP比PNG文件少了45%的文件大小,即使這些PNG文件經(jīng)過其他壓縮工具例如ImageOptim壓縮后,WebP依然可以減少約28%的文件大小。
WebP轉(zhuǎn)換的工具可以選擇智圖和iSparta等
2.5 盡量使用NinePatch格式的PNG圖
.9.png圖片格式簡稱NinePatch圖,本質(zhì)上仍然是PNG格式圖片,它是針對Android平臺的一種特殊PNG格式圖片,可以在圖片指定位置拉伸或者填充內(nèi)容。NinePatch圖的優(yōu)點(diǎn)是體積小,拉伸不變形,能夠很好地適配Android各種機(jī)型。Android SDK自帶了NinePatch圖的編輯工具,位于sdk/tools/draw9patch,點(diǎn)擊即可啟動;當(dāng)然,Android Studio也集成了PNG轉(zhuǎn)NinePatch的功能,我們只需右鍵點(diǎn)擊某個需要轉(zhuǎn)換的PNG圖片,在彈出的對話框中選擇Create 9-Patch File…即可自動完成轉(zhuǎn)換。
3. 圖片的緩存
圖片的緩存框架有很多,常見的有四種
- Android-Universal-Image-Loader
- Picasso
- Glide
- Fresco
這四種圖片加載框架的優(yōu)劣就不在一一說明,因?yàn)殡S便一搜就可以知道答案,我們可以根據(jù)項(xiàng)目來權(quán)衡使用哪一個圖片加載框架。
相關(guān)文章
Android中自定義對話框(Dialog)的實(shí)例代碼
這篇文章介紹了Android中自定義對話框(Dialog)的實(shí)例代碼,有需要的朋友可以參考一下2013-08-08
Android學(xué)習(xí)筆記45之gson解析json
JSON即JavaScript Object Natation,是一種輕量級的數(shù)據(jù)交換格式,采用完全獨(dú)立于語言的文本格式,為Web開發(fā)提供了一種理想的數(shù)據(jù)交換格式。通過本篇文章給大家介紹Android學(xué)習(xí)筆記45之gson解析json的相關(guān)內(nèi)容,對android gson解析json相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12
Android編程實(shí)現(xiàn)橫豎屏切換時不銷毀當(dāng)前activity和鎖定屏幕的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)橫豎屏切換時不銷毀當(dāng)前activity和鎖定屏幕的方法,涉及Android屬性設(shè)置及activity操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Android實(shí)現(xiàn)EditText添加下劃線
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)給EditText添加下劃線,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
Android使用Intent傳遞組件大數(shù)據(jù)
這篇文章主要介紹了Android使用Intent傳遞組件大數(shù)據(jù),文章圍繞主題展開詳細(xì)的內(nèi)容詳情,感興趣的朋友可以參考一下2022-07-07
Android Loader的使用以及手機(jī)通訊錄的獲取方法
下面小編就為大家分享一篇Android Loader的使用以及手機(jī)通訊錄的獲取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android利用AsyncTask異步類實(shí)現(xiàn)網(wǎng)頁內(nèi)容放大縮小
這篇文章主要為大家介紹了利用AsyncTask異步類實(shí)現(xiàn)網(wǎng)頁內(nèi)容放大縮小的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07

