图片质量压缩保存

不改变图片的分辨率大小,即图片始终为200x300。

 /**
   * 把Bitmap进行压缩保存成文件
   * 图片最终的格式为jpg
   *
   * @param dirPath 保存图片的目录
   * @param filename 保存图片的文件名
   * @param bitmap 要保存成文件的bitmap
   * @param maxKB 图片质量的最大值,单位为KB【压缩的阈值】
   */
  public static boolean saveBitmapToFile(@NonNull String dirPath, @NonNull String filename,
      @NonNull Bitmap bitmap, @NonNull int maxKB) {
    if (maxKB <= 0) {
      return false;
    }
    if (TextUtils.isEmpty(dirPath) || TextUtils.isEmpty(filename) || bitmap == null) return false;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
    int options = 100;
    while (baos.size() / 1024 > maxKB) { //循环判断如果压缩后图片是否大于maxKB,大于继续压缩
      baos.reset();//重置清空baos
      options -= 10;//质量压缩比例减10
      bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//压缩options%,把压缩后的数据存放到baos中
    }
    FileOutputStream out = null;
    try {
      File dir = new File(dirPath);
      if (!dir.exists()) {
        dir.mkdirs();
      }

      File file = new File(dirPath, filename);
      if (file.exists()) {
        file.delete();
      }
      file.createNewFile();
      out = new FileOutputStream(file);
      baos.writeTo(out);
      out.flush();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      return false;
    } catch (IOException e) {
      e.printStackTrace();
      return false;
    } finally {
      CloseableUtil.closeSilently(out);
      CloseableUtil.closeSilently(baos);
    }
    return true;
  }

你可能感兴趣的:(图片质量压缩保存)