Android 图片压缩框架Compressor

第三方图片压缩框架: Compressor

使用步骤

  1. 导入依赖
implementation 'id.zelory:compressor:2.1.0'
  1. 调用压缩方法
    /**
     * 使用Compressor RxJava模式压缩
     *
     * @param path  需要压缩的图片
     */
    private void initCompressorRxJava(String path) {
        new Compressor(this)
                .compressToFileAsFlowable(new File(path))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(File file) {

            
                              //返回的图片为file
                             //图片显示
                                image.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));

                        Log.d(TAG, "accept: "+"压缩后大小" + FileUtils.getFileSize(file.length()));
                    }
                }, new Consumer() {
                    @Override
                    public void accept(Throwable throwable) {
                        throwable.printStackTrace();

                     DisplayToast("压缩失败了");
                    }
                });
    }

3.自定义压缩比例

  /**
     * 使用Compressor IO模式自定义压缩
     *
     * @param path
     *.setMaxWidth(640).setMaxHeight(480)这两个数值越高,压缩力度越小,图片也不清晰
     *.setQuality(75)这个方法只是设置图片质量,并不影响压缩图片的大小KB
     *.setCompressFormat(Bitmap.CompressFormat.WEBP) WEBP图片格式是Google推出的 压缩强,质量 高,但是IOS不识别,需要把图片转为字节流然后转PNG格式
     .setCompressFormat(Bitmap.CompressFormat.PNG)PNG格式的压缩,会导致图片变大,并耗过大的内 存,手机反应缓慢
    .setCompressFormat(Bitmap.CompressFormat.JPEG)JPEG压缩;压缩速度比PNG快,质量一般,基本上属于1/10的压缩比例
     *
     */
    private void initCompressorIO(String path) {
        try {
            File file = new Compressor(this)
                    .setMaxWidth(640)
                    .setMaxHeight(480)
                    .setQuality(75)
                    .setCompressFormat(Bitmap.CompressFormat.WEBP)
                    .setDestinationDirectoryPath(FileUtils.createFile(this))
                    .compressToFile(new File(path));
            Glide.with(CompressorActivity.this)
                    .load(file)
                    .into(mImageNew);
            mText.setText("压缩后大小" + FileUtils.getDataSize(file.length()));//32.64KB
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

你可能感兴趣的:(Android 图片压缩框架Compressor)