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<File>() {
                    @Override
                    public void accept(File file) {

            
                              //返回的圖片為file
                             //圖片顯示
                                image.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));

                        Log.d(TAG, "accept: "+"壓縮后大小" + FileUtils.getFileSize(file.length()));
                    }
                }, new Consumer<Throwable>() {
                    @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();
        }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。