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. GridView 加载并显示本地图片
  2. android Gide加载webp图片方法
  3. android避免decodeResource图片时占用太大的内存。
  4. android 图片全屏
  5. Android 图片缩放,手势,事件
  6. Android图片圆角处理
  7. Android如何通过代码将res里的图片转换成drawable.
  8. Android通过图片名字获得ID
  9. android图片上传springMvc

随机推荐

  1. 如何将打开res raw目录中的数据库文件?
  2. Android O(8.0)创建桌面快捷方式
  3. Android(安卓)TV 开发简介
  4. 服务端和Android客户端利用Socket传输JSO
  5. 安卓MonkeyRunner源码分析之与Android设
  6. Android:只需一句话解决读写权限授予后仍
  7. Android日志系统驱动程序Logger源代码分
  8. Android重写OnTouchListener实现双击事件
  9. Android中使用【microlog4】进行日志存储
  10. iMX6QD How to Add 24-bit LVDS Support