android 比较靠谱的图片压缩

【android 比较靠谱的图片压缩】仰天大笑出门去,我辈岂是蓬蒿人。这篇文章主要讲述android 比较靠谱的图片压缩相关的知识,希望能为你提供帮助。
第一:我们先看下质量压缩方法:
 
 
java代码  

android 比较靠谱的图片压缩

文章图片
  1. private  Bitmap  compressImage(Bitmap  image)  {   
  2.    
  3.                 ByteArrayOutputStream  baos  =  new  ByteArrayOutputStream();    
  4.                 image.compress(Bitmap.CompressFormat.JPEG,  100,  baos); //质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中   
  5.                 int  options  =  100;    
  6.                 while  (  baos.toByteArray().length  /  1024> 100)  {    //循环判断如果压缩后图片是否大于100kb,大于继续压缩                 
  7.                         baos.reset(); //重置baos即清空baos   
  8.                         image.compress(Bitmap.CompressFormat.JPEG,  options,  baos); //这里压缩options%,把压缩后的数据存放到baos中   
  9.                         options  -=  10; //每次都减少10   
  10.                 }   
  11.                 ByteArrayInputStream  isBm  =  new  ByteArrayInputStream(baos.toByteArray()); //把压缩后的数据baos存放到ByteArrayInputStream中   
  12.                 Bitmap  bitmap  =  BitmapFactory.decodeStream(isBm,  null,  null); //把ByteArrayInputStream数据生成图片   
  13.                 return  bitmap;    
  14.         }   
 
第二:图片按比例大小压缩方法(根据路径获取图片并压缩):
 
 
Java代码  
android 比较靠谱的图片压缩

文章图片
  1. private  Bitmap  getimage(String  srcPath)  {   
  2.                 BitmapFactory.Options  newOpts  =  new  BitmapFactory.Options();    
  3.                 //开始读入图片,此时把options.inJustDecodeBounds  设回true了   
  4.                 newOpts.inJustDecodeBounds  =  true;    
  5.                 Bitmap  bitmap  =  BitmapFactory.decodeFile(srcPath,newOpts); //此时返回bm为空   
  6.                    
  7.                 newOpts.inJustDecodeBounds  =  false;    
  8.                 int  w  =  newOpts.outWidth;    
  9.                 int  h  =  newOpts.outHeight;    
  10.                 //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为   
  11.                 float  hh  =  800f; //这里设置高度为800f   
  12.                 float  ww  =  480f; //这里设置宽度为480f   
  13.                 //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可   
  14.                 int  be  =  1; //be=1表示不缩放   
  15.                 if  (w  >   h  & &   w  >   ww)  {//如果宽度大的话根据宽度固定大小缩放   
  16.                         be  =  (int)  (newOpts.outWidth  /  ww);    
  17.                 }  else  if  (w  <   h  & &   h  >   hh)  {//如果高度高的话根据宽度固定大小缩放   
  18.                         be  =  (int)  (newOpts.outHeight  /  hh);    
  19.                 }   
  20.                 if  (be  < =  0)   
  21.                         be  =  1;    
  22.                 newOpts.inSampleSize  =  be; //设置缩放比例   
  23.                 //重新读入图片,注意此时已经把options.inJustDecodeBounds  设回false了   
  24.                 bitmap  =  BitmapFactory.decodeFile(srcPath,  newOpts);    
  25.                 return  compressImage(bitmap); //压缩好比例大小后再进行质量压缩   
  26.         }   
 
第三:图片按比例大小压缩方法(根据Bitmap图片压缩):
 
Java代码  
android 比较靠谱的图片压缩

文章图片
  1. private  Bitmap  comp(Bitmap  image)  {   
  2.            
  3.         ByteArrayOutputStream  baos  =  new  ByteArrayOutputStream();                  
  4.         image.compress(Bitmap.CompressFormat.JPEG,  100,  baos);    
  5.         if(  baos.toByteArray().length  /  1024> 1024)  {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出       
  6.                 baos.reset(); //重置baos即清空baos   
  7.                 image.compress(Bitmap.CompressFormat.JPEG,  50,  baos); //这里压缩50%,把压缩后的数据存放到baos中   
  8.         }   
  9.         ByteArrayInputStream  isBm  =  new  ByteArrayInputStream(baos.toByteArray());    
  10.         BitmapFactory.Options  newOpts  =  new  BitmapFactory.Options();    
  11.         //开始读入图片,此时把options.inJustDecodeBounds  设回true了   
  12.         newOpts.inJustDecodeBounds  =  true;    
  13.         Bitmap  bitmap  =  BitmapFactory.decodeStream(isBm,  null,  newOpts);    
  14.         newOpts.inJustDecodeBounds  =  false;    
  15.         int  w  =  newOpts.outWidth;    
  16.         int  h  =  newOpts.outHeight;    
  17.         //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为   
  18.         float  hh  =  800f; //这里设置高度为800f   
  19.         float  ww  =  480f; //这里设置宽度为480f   
  20.         //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可   
  21.         int  be  =  1; //be=1表示不缩放   
  22.         if  (w  >   h  & &   w  >   ww)  {//如果宽度大的话根据宽度固定大小缩放   
  23.                 be  =  (int)  (newOpts.outWidth  /  ww);    
  24.         }  else  if  (w  <   h  & &   h  >   hh)  {//如果高度高的话根据宽度固定大小缩放   
  25.                 be  =  (int)  (newOpts.outHeight  /  hh);    
  26.         }   
  27.         if  (be  < =  0)   
  28.                 be  =  1;    
  29.         newOpts.inSampleSize  =  be; //设置缩放比例   
  30.         //重新读入图片,注意此时已经把options.inJustDecodeBounds  设回false了   
  31.         isBm  =  new  ByteArrayInputStream(baos.toByteArray());    
  32.         bitmap  =  BitmapFactory.decodeStream(isBm,  null,  newOpts);    
  33.         return  compressImage(bitmap); //压缩好比例大小后再进行质量压缩   

    推荐阅读