真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android應(yīng)用中實(shí)現(xiàn)圖片壓縮的方法有哪些

這篇文章將為大家詳細(xì)講解有關(guān)Android應(yīng)用中實(shí)現(xiàn)圖片壓縮的方法有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、臨漳網(wǎng)絡(luò)推廣、小程序開發(fā)、臨漳網(wǎng)絡(luò)營銷、臨漳企業(yè)策劃、臨漳品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供臨漳建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

Android圖片壓縮幾種方式總結(jié)

圖片壓縮在Android開發(fā)中很常見也很重要,防止圖片的OOM也是壓縮的重要原因。

首先看下Bitmap圖片文件的大小的決定因素:

Bitmap所占用的內(nèi)存 = 圖片長度 x 圖片寬度 x 一個(gè)像素點(diǎn)占用的字節(jié)數(shù)。3個(gè)參數(shù),任意減少一個(gè)的值,就達(dá)到了壓縮的效果。

接下來看下Bitmap圖片的幾種格式的特點(diǎn):

ALPHA_8
 表示8位Alpha位圖,即A=8,一個(gè)像素點(diǎn)占用1個(gè)字節(jié),它沒有顏色,只有透明度
 ARGB_4444
表示16位ARGB位圖,即A=4,R=4,G=4,B=4,一個(gè)像素點(diǎn)占4+4+4+4=16位,2個(gè)字節(jié)
ARGB_8888
表示32位ARGB位圖,即A=8,R=8,G=8,B=8,一個(gè)像素點(diǎn)占8+8+8+8=32位,4個(gè)字節(jié)
RGB_565
表示16位RGB位圖,即R=5,G=6,B=5,它沒有透明度,一個(gè)像素點(diǎn)占5+6+5=16位,2個(gè)字節(jié)

如果進(jìn)行圖片格式的壓縮的話,一般情況下都是ARGB_8888轉(zhuǎn)為RGB565進(jìn)行壓縮。

寫了一個(gè)工具類,基本上列舉了android上圖片的幾種基本壓縮方式:

1.質(zhì)量壓縮

2.采樣率壓縮

3.尺寸壓縮

4.Matrix壓縮

5.圖片格式的壓縮,例如PNG和JPG保存后的圖片大小是不同的

public class Utils { 
 
  /** 
   * 采樣率壓縮 
   * 
   * @param bitmap 
   * @param sampleSize 采樣率為2的整數(shù)倍,非整數(shù)倍四舍五入,如4的話,就是原圖的1/4 
   * @return 尺寸變化 
   */ 
  public static Bitmap getBitmap(Bitmap bitmap, int sampleSize) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = sampleSize; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] bytes = baos.toByteArray(); 
    Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); 
    Log.i("info", "圖片大?。? + bit.getByteCount());//2665296  10661184 
    return bit; 
  } 
 
  /** 
   * 圖片質(zhì)量壓縮 
   * 
   * @param bitmap 
   * @param quality 
   * @return 尺寸不變,質(zhì)量變小 
   */ 
  public static Bitmap compressByQuality(Bitmap bitmap, int quality) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos); 
    byte[] bytes = baos.toByteArray(); 
    Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
    Log.i("info", "圖片大?。? + bit.getByteCount());//10661184 
    return bit; 
  } 
 
  /** 
   * 圖片質(zhì)量壓縮 
   * 
   * @param src 
   * @param maxByteSize 
   * @return 
   */ 
  public static Bitmap compressByQuality(Bitmap src, long maxByteSize) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    int quality = 100; 
    src.compress(Bitmap.CompressFormat.JPEG, quality, baos); 
    while (baos.toByteArray().length > maxByteSize && quality > 0) { 
      baos.reset(); 
      src.compress(Bitmap.CompressFormat.JPEG, quality -= 5, baos); 
    } 
    if (quality < 0) return null; 
    byte[] bytes = baos.toByteArray(); 
    Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
    return bit; 
  } 
 
  public static Bitmap compressByFormat(Bitmap bitmap, int format) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] bytes = baos.toByteArray(); 
    Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
    Log.i("info", "圖片大小:" + bit.getByteCount());//10661184 
    return bit; 
  } 
 
  /** 
   * Matrix縮放 
   * 
   * @param bitmap 
   * @param scaleWidth 
   * @param scaleHeight 
   * @return 尺寸和大小變化 
   */ 
  public static Bitmap getBitmapBySize(Bitmap bitmap, float scaleWidth, float scaleHeight) { 
    Matrix matrix = new Matrix(); 
    matrix.postScale(scaleWidth, scaleHeight); 
    Bitmap bit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); 
    Log.i("info", "圖片大?。? + bit.getByteCount()); 
    return bit; 
  } 
 
  /** 
   * 按照?qǐng)D片格式配置壓縮 
   * 
   * @param path 
   * @param config ALPHA_8,ARGB_4444,ARGB_8888,RGB_565; 
   * @return RGB_565比ARGB_8888節(jié)省一半內(nèi)存 
   */ 
  public static Bitmap getBitmapByFormatConfig(String path, Bitmap.Config config) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = config; 
    Bitmap bitmap = BitmapFactory.decodeFile(path, options); 
    Log.i("info", "圖片大?。? + bitmap.getByteCount()); 
    return bitmap; 
  } 
 
  /** 
   * 指定大小縮放 
   * 
   * @param bitmap 
   * @param width 
   * @param height 
   * @return 
   */ 
  public static Bitmap getBitmapByScaleSize(Bitmap bitmap, int width, int height) { 
    Bitmap bit = Bitmap.createScaledBitmap(bitmap, width, height, true); 
    Log.i("info", "圖片大?。? + bit.getByteCount()); 
    return bit; 
  } 
 
  /** 
   * 通過保存格式壓縮 
   * 
   * @param bitmap 
   * @param format JPEG,PNG,WEBP 
   * @return 
   */ 
  public static Bitmap getBitmapByFormat(Bitmap bitmap, Bitmap.CompressFormat format) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(format, 100, baos); 
    byte[] bytes = baos.toByteArray(); 
    Bitmap bit = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
    Log.i("info", "圖片大?。? + bit.getByteCount()); 
    return bit; 
  } 
 
  /** 
   * 文件加載壓縮 
   * 
   * @param filePath 
   * @param inSampleSize 
   * @return 
   */ 
  public static Bitmap getBitmap(String filePath, int inSampleSize) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(filePath, options);//此時(shí)不耗費(fèi)和占用內(nèi)存 
    options.inSampleSize = inSampleSize; 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeFile(filePath, options); 
  } 
 
  public static Bitmap getBitmap(String filePath) { 
    return BitmapFactory.decodeFile(filePath); 
  } 
 
  public static Bitmap view2Bitmap(View view) { 
    if (view == null) return null; 
    Bitmap ret = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(ret); 
    Drawable bgDrawable = view.getBackground(); 
    if (bgDrawable != null) { 
      bgDrawable.draw(canvas); 
    } else { 
      canvas.drawColor(Color.WHITE); 
    } 
    view.draw(canvas); 
    return ret; 
  } 
 
  public static void saveBitmap(Bitmap bitmap) { 
    File file = new File(Environment.getExternalStorageDirectory() + "/img.jpg"); 
    try { 
      FileOutputStream fileOutputStream = new FileOutputStream(file); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
 
  public static void saveBitmap(Bitmap bitmap,Bitmap.CompressFormat format) { 
    File file = new File(Environment.getExternalStorageDirectory() + "/img.jpg"); 
    try { 
      FileOutputStream fileOutputStream = new FileOutputStream(file); 
      bitmap.compress(format, 100, fileOutputStream); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

關(guān)于Android應(yīng)用中實(shí)現(xiàn)圖片壓縮的方法有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前標(biāo)題:Android應(yīng)用中實(shí)現(xiàn)圖片壓縮的方法有哪些
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ggcjce.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部