现在手机拍照照片都很多 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() 指定宽高压缩,当然这个工具类里面还提供了 其他压缩方法。