现在手机拍照照片都很多 3~10M很正常,如果要上传到后台那么需要压缩一下,下面利用Glide来压缩

//图片框架 https://github.com/bumptech/glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

下面的 200 200是宽高  设置的越大 图片越大 比如100 100 就更小了 自己看着办,这里不用担心200 200是不是压缩成正方形了,因为Glide会自动处理,举例:原图3000 x 4000 压缩后变成200 x 267

 //对指定路径的图片进行压缩  这里的path是本地的图片路径 比如mnt/sdcard/... 
当然也可以是 网络路径的图片  Glide都支持

                            Bitmap bitmap = Glide.with(MainActivity.this)
                                    .asBitmap()
                                    .load(path)
                                    .submit(200,200)
                                    .get();

然后利用下面的方法保存一下就可以了 这里的path是你要保存的路径  例如:

Environment.getExternalStorageDirectory().getPath() + "/NAME_PIC_FILE.jpg";

CompressFormat.JPEG 图片会更小 但更不清晰 自己看着办

/**
     * 保存图片到sdcard
     *
     * @param bitmap
     */
    public static void savePicToSdcard(String path,Bitmap bitmap) {
        if (bitmap != null) {
            try {
                FileOutputStream out = new FileOutputStream(path);
                bitmap.compress(Bitmap.CompressFormat.PNG, 10, out);
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

经测试 9M的图片 压缩完后 73k

 

压缩完了 建议调用一下   bitmap.recycle();

 

扩展:

在图片大小尽量不变化的场景下,推荐使用 https://github.com/Curzibn/Luban  框架 高仿微信压缩策略

 

在图片大小要明显变化的情况下,比如拍照后压缩成头像那么大,可以使用以上方法,当然也可以使用

https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md 工具类里面的

ImageUtils.compressByScale()  指定宽高压缩,当然这个工具类里面还提供了 其他压缩方法。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐