微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android图片压缩

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

private Bitmap compressImage(Bitmap image) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  //质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  image.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
  int options = 100;
  while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩  
   baos.reset();//重置baos即清空baos
   //这里压缩options%,把压缩后的数据存放到baos中
   image.compress(Bitmap.CompressFormat.JPEG, options, baos); 
   options -= 10;//每次都减少10
  }
  //把压缩后的数据baos存放到ByteArrayInputStream中 
  ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
  Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
  return bitmap;
 }
private Bitmap getimage(String srcPath) {

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

  //开始读入图片,此时把options.inJustDecodeBounds 设回true了

  newOpts.inJustDecodeBounds = true;//只读边,不读内容
  Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空

  newOpts.inJustDecodeBounds = false;
  int w = newOpts.outWidth;
  int h = newOpts.outHeight;
  //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  float hh = 800f;//这里设置高度为800f
  float ww = 480f;//这里设置宽度为480f

  //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  int be = 1;//be=1表示不缩放
  if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
   be = (int) (newOpts.outWidth / ww);
  } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
   be = (int) (newOpts.outHeight / hh);
  }

  if (be <= 0)
   be = 1;
  newOpts.inSampleSize = be;//设置缩放比例
  //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
  bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
  return compressImage(bitmap);//压缩好比例大小后再进行质量压缩

 }
 private Bitmap comp(Bitmap image) {

  ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  image.compress(Bitmap.CompressFormat.JPEG, baos);
  if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 

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

   image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中

  }

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

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

  //开始读入图片,此时把options.inJustDecodeBounds 设回true了

  newOpts.inJustDecodeBounds = true;

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

  newOpts.inJustDecodeBounds = false;

  int w = newOpts.outWidth;

  int h = newOpts.outHeight;

  //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

  float hh = 800f;//这里设置高度为800f

  float ww = 480f;//这里设置宽度为480f

  //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

  int be = 1;//be=1表示不缩放

  if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放

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

  } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放

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

  }

  if (be <= 0)

   be = 1;

  newOpts.inSampleSize = be;//设置缩放比例

  //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了

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

  bitmap = BitmapFactory.decodeStream(isBm, newOpts);

  return compressImage(bitmap);//压缩好比例大小后再进行质量压缩

 }

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐