关于图片的压缩处理

  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. }

相关文章
相关标签/搜索