亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android小知識(shí)之圖片的3種壓縮方式小結(jié)

 更新時(shí)間:2018年10月22日 08:29:24   作者:顧林海  
這篇文章主要給大家介紹了關(guān)于Android小知識(shí)之圖片的3種壓縮方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

設(shè)置圖片格式

Android目前常用的圖片格式有png,jpeg和webp,

png:無損壓縮圖片格式,支持Alpha通道,Android切圖素材多采用此格式

jpeg:有損壓縮圖片格式,不支持背景透明,適用于照片等色彩豐富的大圖壓縮,不適合logo

webp:是一種同時(shí)提供了有損壓縮和無損壓縮的圖片格式,派生自視頻編碼格式VP8,從谷歌官網(wǎng)來看,無損webp平均比png小26%,有損的webp平均比jpeg小25%~34%,無損webp支持Alpha通道,有損webp在一定的條件下同樣支持,有損webp在Android4.0(API 14)之后支持,無損和透明在Android4.3(API18)之后支持

采用webp能夠在保持圖片清晰度的情況下,可以有效減小圖片所占有的磁盤空間大小

Android中Bitmap所占內(nèi)存大小計(jì)算方式:圖片長(zhǎng)度 x 圖片寬度 x 一個(gè)像素點(diǎn)占用的字節(jié)數(shù)

1、Bitmap的Compress方法(質(zhì)量壓縮):

public boolean compress(CompressFormat format, int quality, OutputStream stream)

參數(shù)format:表示圖像的壓縮格式,目前有CompressFormat.JPEG、CompressFormat.PNG、CompressFormat.WEBP。

參數(shù)quality: 圖像壓縮率,0-100。 0 壓縮100%,100意味著不壓縮。

參數(shù)stream: 寫入壓縮數(shù)據(jù)的輸出流。

常用的用法:

public static Bitmap compress(Bitmap bitmap){

 ByteArrayOutputStream baos = new ByteArrayOutputStream();

 bitmap.compress(Bitmap.CompressFormat.JPEG, 90, baos);

 byte[] bytes = baos.toByteArray();

 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

}

上面方法中通過bitmap的compress方法對(duì)bitmap進(jìn)行質(zhì)量壓縮,10%壓縮,90%不壓縮。

圖片的大小是沒有變的,因?yàn)橘|(zhì)量壓縮不會(huì)減少圖片的像素,它是在保持像素的前提下改變圖片的位深及透明度等,來達(dá)到壓縮圖片的目的,這也是為什么該方法叫質(zhì)量壓縮方法。圖片的長(zhǎng),寬,像素都不變,那么bitmap所占內(nèi)存大小是不會(huì)變的。

quality值越小壓縮后的baos越?。ㄊ褂脠?chǎng)景:在微信分享時(shí),需要對(duì)圖片的字節(jié)數(shù)組大小進(jìn)行限制,這時(shí)可以使用bitmap的compress方法對(duì)圖片進(jìn)行質(zhì)量壓縮)。

2、BitmapFactory.Options的inJustDecodeBounds和inSampleSize參數(shù)(采樣壓縮率):

inJustDecodeBounds:當(dāng)inJustDecodeBounds設(shè)置為true的時(shí)候,BitmapFactory通過decodeXXXX解碼圖片時(shí),將會(huì)返回空(null)的Bitmap對(duì)象,這樣可以避免Bitmap的內(nèi)存分配,但是它可以返回Bitmap的寬度、高度以及MimeType。

inSampleSize: 當(dāng)它小于1的時(shí)候,將會(huì)被當(dāng)做1處理,如果大于1,那么就會(huì)按照比例(1 / inSampleSize)縮小bitmap的寬和高、降低分辨率,大于1時(shí)這個(gè)值將會(huì)被處置為2的倍數(shù)。例如,width=100,height=100,inSampleSize=2,那么就會(huì)將bitmap處理為,width=50,height=50,寬高降為1 / 2,像素?cái)?shù)降為1 / 4。

常用用法:

public static Bitmap inSampleSize(Bitmap bitmap,int reqWidth,int reqHeight){

 final BitmapFactory.Options options = new BitmapFactory.Options();

 options.inJustDecodeBounds = true;

 BitmapFactory.decodeByteArray(data, 0, data.length, options);

 options.inSampleSize = calculateInSampleSize(options, reqWidth,

   reqHeight);

 options.inJustDecodeBounds = false;

 return BitmapFactory.decodeByteArray(data, 0, data.length, options);

}

public static int calculateInSampleSize(BitmapFactory.Options options,

          int reqWidth, int reqHeight) {

 final int picheight = options.outHeight;

 final int picwidth = options.outWidth;

 int targetheight = picheight;

 int targetwidth = picwidth;

 int inSampleSize = 1;

 if (targetheight > reqHeight || targetwidth > reqWidth) {

  while (targetheight >= reqHeight

    && targetwidth >= reqWidth) {

   inSampleSize += 1;

   targetheight = picheight / inSampleSize;

   targetwidth = picwidth / inSampleSize;

  }

 }

 return inSampleSize;

}
}

inSampleSize方法中先將inJustDecodeBounds設(shè)置為false,在通過BitmapFactory的decodeXXXX方法解碼圖片,返回空(null)的Bitmap對(duì)象,同時(shí)獲取了bitmap的寬高,再通過calculateInSampleSize方法根據(jù)原bitmap的 寬高和目標(biāo)寬高計(jì)算出合適的inSampleSize,最后將inJustDecodeBounds設(shè)置為true,通過BitmapFactory的decodeXXXX方法解碼圖片(使用場(chǎng)景:比如讀取本地圖片時(shí),防止Bitmap過大導(dǎo)致內(nèi)存溢出)。

3、通過Matrix壓縮圖片

Matrix matrix = new Matrix();

matrix.setScale(0.5f, 0.5f);

bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(),bit.getHeight(), matrix, true);

}

使用場(chǎng)景:自定義View時(shí),對(duì)圖片進(jìn)行縮放、旋轉(zhuǎn)、位移以及傾斜等操作,常見的就是對(duì)圖片進(jìn)行縮放處理,以及圓角圖片等。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android開源組件SlidingMenu側(cè)滑菜單使用介紹

    Android開源組件SlidingMenu側(cè)滑菜單使用介紹

    這篇文章主要介紹了Android開源組件SlidingMenu側(cè)滑菜單使用介紹,本文給出了SlidingMenu的項(xiàng)目地址、使用代碼、使用配置、常用的一些屬性設(shè)置中文注解等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Android通過應(yīng)用程序創(chuàng)建快捷方式的方法

    Android通過應(yīng)用程序創(chuàng)建快捷方式的方法

    這篇文章主要介紹了Android通過應(yīng)用程序創(chuàng)建快捷方式的方法,涉及Android基于應(yīng)用程序創(chuàng)建快捷方式的圖標(biāo)及動(dòng)作等技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android計(jì)時(shí)器chronometer使用實(shí)例講解

    Android計(jì)時(shí)器chronometer使用實(shí)例講解

    這篇文章主要為大家詳細(xì)介紹了Android計(jì)時(shí)器chronometer使用實(shí)例,介紹了Android計(jì)時(shí)器chronometer基本使用方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android 美食大轉(zhuǎn)盤詳解流程

    Android 美食大轉(zhuǎn)盤詳解流程

    今天為大家?guī)硪黄狝ndroid實(shí)例項(xiàng)目,美食大轉(zhuǎn)盤,當(dāng)你還在為明天吃什么而煩惱時(shí),它將幫你做出最佳的選擇,美食大轉(zhuǎn)盤詳細(xì)流程來咯
    2021-11-11
  • Android中的JNI數(shù)組操作教程

    Android中的JNI數(shù)組操作教程

    這篇文章主要給大家介紹了關(guān)于Android中JNI數(shù)組操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android ListView組件詳解及示例代碼

    Android ListView組件詳解及示例代碼

    本文主要介紹Android ListView,這里整理了ListView 組件的資料,并附示例代碼和實(shí)現(xiàn)效果圖,有需要的朋友可以參考下
    2016-08-08
  • Android之PreferenceActivity應(yīng)用詳解

    Android之PreferenceActivity應(yīng)用詳解

    為了引入這個(gè)概率 首先從需求說起 即:現(xiàn)有某Activity專門用于手機(jī)屬性設(shè)置 那么應(yīng)該如何做呢
    2012-11-11
  • Android使用IntentService進(jìn)行apk更新示例代碼

    Android使用IntentService進(jìn)行apk更新示例代碼

    這篇文章主要介紹了Android使用IntentService進(jìn)行apk更新示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android style的繼承方式 點(diǎn)(.)和parent詳解及實(shí)例

    Android style的繼承方式 點(diǎn)(.)和parent詳解及實(shí)例

    這篇文章主要介紹了Android style的繼承方式 點(diǎn)(.)和parent詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Flutter?隊(duì)列任務(wù)的實(shí)現(xiàn)

    Flutter?隊(duì)列任務(wù)的實(shí)現(xiàn)

    本文主要介紹了Flutter?隊(duì)列任務(wù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論