bitmap compress 圖片壓縮 圖片文件大小處理

android中圖片加載到內存中所佔空間大小計算:分辨率 height*width*一個像素所佔空間大小 

解析:decode時指定解碼方式爲ARGB_8888 代表用8位表示透明度(A),8位表示紅色(R),8位表示綠色(G),8位表示藍色(B),也就是說每個像素佔用4*8=32位空間(等於4byte),相對應 RGB_565,一共用16位(2byte)表示一個像素

舉個例子,上述屬性圖片,加載到程序中 分別佔用720*1230*4=3542400byte= 3.38MB(ARGB_8888);720*1230*2=1771200byte=1.67MB(RGB_565)

光說不行,咱得上代碼上圖,沒圖說個**對不對






代碼很簡單,bitmap自帶getByteCount()方法。

然後兩者的清晰度區別,從上面兩張圖中還是能看出來有些差別,16位解碼出的圖片略微有點失真。


=================================華麗的分割線=================================


接下來說下bitmap的compress方法。

compress將bitmap壓縮輸出到流當中,參數一指定輸出的文件類型,參數二0-100指定質量,也決定了壓縮後的流大小。

參數一指定png 參數二就都爲100了,不會再打折壓縮了,所以要壓縮質量,要指定爲jpeg,(第三種webp格式沒有接觸過)

不知道是不是錯覺,指定jpeg情況下,哪怕質量指定100,出來的圖片還是感覺跟原圖有差距,略微有些失真,所以,需要保持原圖效果,還是指定爲png格式吧。

compress方法查看源碼,直接調用的是c層代碼,跟進c層代碼 發現是skia庫起的作用,skia中繼續調用了libjpeg或者libpng庫來處理壓縮圖片。

繼續上圖舉例子:


jpeg 100%情況下 壓縮後流大小爲299490byte(300k)左右


jpeg 80%情況下 壓縮後流大小爲56043byte(56k)左右


jpeg 50%情況下 壓縮後流大小爲35443byte(35k)左右


jpeg 20%情況下 壓縮後流大小爲24802byte(25k)左右


可以看到,壓縮後圖片大小的減少還是非常明顯的,不過一般情況下 壓縮率在80%以上就OK,繼續往下,文件減少的幅度大幅下降,失真度卻大幅上升。

如果還對圖片佔用大小不滿意,那要從圖片分辨率方面入手(文章第一部分),而不是繼續降低壓縮比率。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章