關於圖片的壓縮處理

  1. 第一:咱們先看下質量壓縮方法:java

  2. Java代碼  收藏代碼spa

  3. private Bitmap compressImage(Bitmap image) {  code

  4.  

  5.        ByteArrayOutputStream baos = new ByteArrayOutputStream();  orm

  6.        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裏100表示不壓縮,把壓縮後的數據存放到baos中  圖片

  7.        int options = 100;  get

  8.        while ( baos.toByteArray().length / 1024>100) {  //循環判斷若是壓縮後圖片是否大於100kb,大於繼續壓縮         it

  9.            baos.reset();//重置baos即清空baos  io

  10.            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裏壓縮options%,把壓縮後的數據存放到baos中  class

  11.            options -= 10;//每次都減小10  循環

  12.        }  

  13.        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中  

  14.        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數據生成圖片  

  15.        return bitmap;  

  16.    }  

  17. 第二:圖片按比例大小壓縮方法(根據路徑獲取圖片並壓縮):

  18. Java代碼  收藏代碼

  19. private Bitmap getimage(String srcPath) {  

  20.        BitmapFactory.Options newOpts = new BitmapFactory.Options();  

  21.        //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了  

  22.        newOpts.inJustDecodeBounds = true;  

  23.        Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此時返回bm爲空  

  24.          

  25.        newOpts.inJustDecodeBounds = false;  

  26.        int w = newOpts.outWidth;  

  27.        int h = newOpts.outHeight;  

  28.        //如今主流手機比較可能是800*480分辨率,因此高和寬咱們設置爲  

  29.        float hh = 800f;//這裏設置高度爲800f  

  30.        float ww = 480f;//這裏設置寬度爲480f  

  31.        //縮放比。因爲是固定比例縮放,只用高或者寬其中一個數據進行計算便可  

  32.        int be = 1;//be=1表示不縮放  

  33.        if (w > h && w > ww) {//若是寬度大的話根據寬度固定大小縮放  

  34.            be = (int) (newOpts.outWidth / ww);  

  35.        } else if (w < h && h > hh) {//若是高度高的話根據寬度固定大小縮放  

  36.            be = (int) (newOpts.outHeight / hh);  

  37.        }  

  38.        if (be <= 0)  

  39.            be = 1;  

  40.        newOpts.inSampleSize = be;//設置縮放比例  

  41.        //從新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了  

  42.        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  

  43.        return compressImage(bitmap);//壓縮比如例大小後再進行質量壓縮  

  44.    }  

  45. 第三:圖片按比例大小壓縮方法(根據Bitmap圖片壓縮):

  46. Java代碼  收藏代碼

  47. private Bitmap comp(Bitmap image) {  

  48.      

  49.    ByteArrayOutputStream baos = new ByteArrayOutputStream();        

  50.    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  

  51.    if( baos.toByteArray().length / 1024>1024) {//判斷若是圖片大於1M,進行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢出    

  52.        baos.reset();//重置baos即清空baos  

  53.        image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//這裏壓縮50%,把壓縮後的數據存放到baos中  

  54.    }  

  55.    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  

  56.    BitmapFactory.Options newOpts = new BitmapFactory.Options();  

  57.    //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了  

  58.    newOpts.inJustDecodeBounds = true;  

  59.    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  

  60.    newOpts.inJustDecodeBounds = false;  

  61.    int w = newOpts.outWidth;  

  62.    int h = newOpts.outHeight;  

  63.    //如今主流手機比較可能是800*480分辨率,因此高和寬咱們設置爲  

  64.    float hh = 800f;//這裏設置高度爲800f  

  65.    float ww = 480f;//這裏設置寬度爲480f  

  66.    //縮放比。因爲是固定比例縮放,只用高或者寬其中一個數據進行計算便可  

  67.    int be = 1;//be=1表示不縮放  

  68.    if (w > h && w > ww) {//若是寬度大的話根據寬度固定大小縮放  

  69.        be = (int) (newOpts.outWidth / ww);  

  70.    } else if (w < h && h > hh) {//若是高度高的話根據寬度固定大小縮放  

  71.        be = (int) (newOpts.outHeight / hh);  

  72.    }  

  73.    if (be <= 0)  

  74.        be = 1;  

  75.    newOpts.inSampleSize = be;//設置縮放比例  

  76.    //從新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了  

  77.    isBm = new ByteArrayInputStream(baos.toByteArray());  

  78.    bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  

  79.    return compressImage(bitmap);//壓縮比如例大小後再進行質量壓縮  

  80. }

相關文章
相關標籤/搜索