android -------- 壓縮圖片文件工具類


項目中常常遇到文件壓縮問題,上傳文件大小限制

今天簡單的分享一點干貨,文件壓縮,圖片壓縮,壓縮Bitmap

主要通過尺寸壓縮和質量壓縮,以達到清晰度最優

 

效果圖

        

 

 

源碼地址: https://github.com/DickyQie/android-util

 

工具類代碼

public class CompressHelper {
    private static volatile CompressHelper INSTANCE;

    private Context context;
    /**
     * 最大寬度,默認為720
     */
    private float maxWidth = 720.0f;
    /**
     * 最大高度,默認為960
     */
    private float maxHeight = 960.0f;
    /**
     * 默認壓縮后的方式為JPEG
     */
    private Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.JPEG;

    /**
     * 默認的圖片處理方式是ARGB_8888
     */
    private Bitmap.Config bitmapConfig = Bitmap.Config.ARGB_8888;
    /**
     * 默認壓縮質量為80
     */
    private int quality = 80;
    /**
     * 存儲路徑
     */
    private String destinationDirectoryPath;
    /**
     * 文件名前綴
     */
    private String fileNamePrefix;
    /**
     * 文件名
     */
    private String fileName;

    public static CompressHelper getDefault(Context context) {
        if (INSTANCE == null) {
            synchronized (CompressHelper.class) {
                if (INSTANCE == null) {
                    INSTANCE = new CompressHelper(context);
                }
            }
        }
        return INSTANCE;
    }


    private CompressHelper(Context context) {
        this.context = context;
        destinationDirectoryPath = context.getCacheDir().getPath() + File.pathSeparator + FileUtil.FILES_PATH;
    }

    /**
     * 壓縮成文件
     * @param file  原始文件
     * @return      壓縮后的文件
     */
    public File compressToFile(File file) {
        return BitmapUtil.compressImage(context, Uri.fromFile(file), maxWidth, maxHeight,
                compressFormat, bitmapConfig, quality, destinationDirectoryPath,
                fileNamePrefix, fileName);
    }

    /**
     * 壓縮為Bitmap
     * @param file  原始文件
     * @return      壓縮后的Bitmap
     */
    public Bitmap compressToBitmap(File file) {
        return BitmapUtil.getScaledBitmap(context, Uri.fromFile(file), maxWidth, maxHeight, bitmapConfig);
    }


    /**
     * 采用建造者模式,設置Builder
     */
    public static class Builder {
        private CompressHelper mCompressHelper;

        public Builder(Context context) {
            mCompressHelper = new CompressHelper(context);
        }

        /**
         * 設置圖片最大寬度
         * @param maxWidth  最大寬度
         */
        public Builder setMaxWidth(float maxWidth) {
            mCompressHelper.maxWidth = maxWidth;
            return this;
        }

        /**
         * 設置圖片最大高度
         * @param maxHeight 最大高度
         */
        public Builder setMaxHeight(float maxHeight) {
            mCompressHelper.maxHeight = maxHeight;
            return this;
        }

        /**
         * 設置壓縮的后綴格式
         */
        public Builder setCompressFormat(Bitmap.CompressFormat compressFormat) {
            mCompressHelper.compressFormat = compressFormat;
            return this;
        }

        /**
         * 設置Bitmap的參數
         */
        public Builder setBitmapConfig(Bitmap.Config bitmapConfig) {
            mCompressHelper.bitmapConfig = bitmapConfig;
            return this;
        }

        /**
         * 設置壓縮質量,建議80
         * @param quality   壓縮質量,[0,100]
         */
        public Builder setQuality(int quality) {
            mCompressHelper.quality = quality;
            return this;
        }

        /**
         * 設置目的存儲路徑
         * @param destinationDirectoryPath  目的路徑
         */
        public Builder setDestinationDirectoryPath(String destinationDirectoryPath) {
            mCompressHelper.destinationDirectoryPath = destinationDirectoryPath;
            return this;
        }

        /**
         * 設置文件前綴
         * @param prefix    前綴
         */
        public Builder setFileNamePrefix(String prefix) {
            mCompressHelper.fileNamePrefix = prefix;
            return this;
        }

        /**
         * 設置文件名稱
         * @param fileName  文件名
         */
        public Builder setFileName(String fileName) {
            mCompressHelper.fileName = fileName;
            return this;
        }

        public CompressHelper build() {
            return mCompressHelper;
        }
    }
}

 

使用

  File oldFile = CompressHelper.getDefault(getApplicationContext()).compressToFile(file);

 

自定義屬性使用

File newFile = new CompressHelper.Builder(this)
                .setMaxWidth(720)  // 默認最大寬度為720
                .setMaxHeight(960) // 默認最大高度為960
                .setQuality(80)    // 默認壓縮質量為80
                .setFileName(yourFileName) // 文件名稱
                .setCompressFormat(CompressFormat.JPEG) // 設置默認壓縮為jpg格式
                .setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES).getAbsolutePath())//路徑
                .build()
                .compressToFile(oldFile);

 

該案例參考了:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM