public static Bitmap revitionImageSize(String path) throws IOException {BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(path)));BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeStream(in, null, options);in.close();int i = 0;Bitmap bitmap = null;while (true) {if ((options.outWidth >> i <= 1000)&& (options.outHeight >> i <= 1000)) {in = new BufferedInputStream(new FileInputStream(new File(path)));options.inSampleSize = (int) Math.pow(2.0D, i);options.inJustDecodeBounds = false;bitmap = BitmapFactory.decodeStream(in, null, options);break;}i += 1;}return bitmap;}

图片按比例大小压缩方法(根据路径获取图片并压缩)

public static Bitmap getimage(String srcPath)throws IOException{          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 bitmap;//压缩好比例大小后再进行质量压缩      }  
第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

public static Bitmap comp(Bitmap image) {            ByteArrayOutputStream baos = new ByteArrayOutputStream();             image.compress(Bitmap.CompressFormat.JPEG, 100, 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, null, 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, null, newOpts);      return bitmap;//压缩好比例大小后再进行质量压缩  }  
根据路径获得突破并压缩返回bitmap用于显示

public static Bitmap getSmallBitmap(String filePath) throws IOException{final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(filePath, options);options.inSampleSize = calculateInSampleSize(options, 480, 800);options.inJustDecodeBounds = false;return BitmapFactory.decodeFile(filePath, options);}/** * 计算图片的缩放值 *  * @param options * @param reqWidth * @param reqHeight * @return */public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {final int height = options.outHeight;final int width = options.outWidth;int inSampleSize = 1;if (height > reqHeight || width > reqWidth) {final int heightRatio = Math.round((float) height/ (float) reqHeight);final int widthRatio = Math.round((float) width / (float) reqWidth);inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;}return inSampleSize;}





更多相关文章

  1. Android(安卓)图片缩放,手势,事件
  2. Android(安卓)TextView中android:textIsSelectable属性在Recycle
  3. Android(安卓)图片缩放,手势,事件
  4. Android(安卓)webView中调用JavaScript
  5. android 根据TextView宽度 自动缩小字体大小 以适应其宽度
  6. android中图片的拖拉和缩放
  7. android 图片处理
  8. android加载本地图片
  9. android 图片的压缩

随机推荐

  1. 热点关注--Android动了Java的奶酪?
  2. Android(安卓)安全机制
  3. iOS和android解决键盘弹出遮挡控件的处理
  4. Android解析中国天气接口JSon数据,应用于
  5. [置顶] Android系统移植与调试之------->
  6. Android(安卓)ndk 开发环境搭建 和 示例
  7. Android开发5――文件读写
  8. android中Parcelable接口的使用
  9. android制作开关机动画注意事项
  10. Android初级教程理论知识(第一章快速入门)