Android --------- 压缩图片的尺寸和大小

压缩图片大小,尺寸不变

  • 将已知路径的图片压缩至不大于目标大小,并保存至指定路径

      /**
       * 质量压缩,通过给定的路径来压缩图片并保存到指定路径
       * 
       * @param srcPath
       *            资源图片的路径
       * @param savePath
       *            图片的保存路径
       * @param aimSize
       *            压缩到图片大小的最大值
       */
      public static void compressImageByPath(String srcPath, String savePath,
              int aimSize) {
          // 注意savePath的文件夹和文件的判断
          Bitmap imgBitmap = BitmapFactory.decodeFile(srcPath);
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          int percent = 100;// 定义压缩比例,初始为不压缩
          imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos);
          int currentSize = baos.toByteArray().length / 1024;
          while (currentSize > aimSize) {// 循环判断压缩后图片是否大于目的大小,若大于则继续压缩
              baos.reset();// 重置baos,即清空baos
              //注意:此处该方法的第一个参数必须为JPEG,若为PNG则无法压缩。
              imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos);
              currentSize = baos.toByteArray().length / 1024;
              percent -= 5;
              if (percent <= 0) {
                  break;
              }
          }
    
          try {//将数据写入输出流
              FileOutputStream fos = new FileOutputStream(savePath);
              baos.writeTo(fos);
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {//清空缓存,关闭流
                  baos.flush();
                  baos.close();
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          if (!imgBitmap.isRecycled()) {
              imgBitmap.recycle();//回收图片所占的内存
              System.gc();//提醒系统及时回收
          }
      }

转载于:https://www.cnblogs.com/tittles0k/p/5788254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值