本人技术菜 只讲怎么使用... 想知道原理的可以百度搜索鲁班压缩
先导入依赖
//luban图片压缩
implementation 'top.zibin:Luban:1.1.8'
如果下载不下来则需要在 setting.gradle 中加入(studio更新后的位置,之前在Project的build.gradle中)
jcenter()
接下来准备好 file类型的图片文件
//鲁班图片压缩
Luban.with(this)
.load(file) // 传人要压缩的图片列表
.ignoreBy(100) // 忽略不压缩图片的大小
.setTargetDir(getPath())// 设置压缩后文件存储位置
.setCompressListener(new OnCompressListener() { //设置回调
@Override
public void onStart() {
// TODO 压缩开始前调用,可以在方法内启动 loading UI
// LogUtil.e("lin","压缩开始");
}
@Override
public void onSuccess(File file) {
// TODO 压缩成功后调用,返回压缩后的图片文件
Log.e("Response", "showImages3: " + file);
}
@Override
public void onError(Throwable e) {
// TODO 当压缩过程出现问题时调用
LogUtil.e("lin","压缩过程出现问题");
}
}).launch(); //启动压缩
下边这个方法是设置储存路径的(现在内存分区了,存储时最好使用新版的数据会储存在包名下)
具体可以搜索 Environment.getExternalStorageDirectory() 和 context.getExternalFilesDir(null) 的区别
//旧版
private String getPath() {
String path = Environment.getExternalStorageDirectory() + "/Luban/image/";
File file = new File(path);
if (!file.exists()) {
boolean mkdirs = file.mkdirs();
if (mkdirs) {
Log.e(TAG, "文件创建成功");
} else {
Log.e(TAG, "文件创建失败");
}
}
return path;
}
//新版
private String getPath() {
String fileInnerName = "/Luban/image/"; //文件夹名
String path = context.getExternalFilesDir(null) + fileInnerName;
File file = new File(path);
if (!file.exists()) {
boolean mkdirs = file.mkdirs();
if (mkdirs) {
Log.e(TAG, "文件创建成功");
} else {
Log.e(TAG, "文件创建失败");
}
}
return path;
}
然后在压缩成功那里就可以取到你需要的压缩后的文件了
最后,别忘了加权限
<!--读写外部存储权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
动态申请权限这里就不写了