android中图片压缩上传方法之Luban库
Posted kaolagirl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中图片压缩上传方法之Luban库相关的知识,希望对你有一定的参考价值。
一.Luban是什么?
Luban(鲁班) —— android图片压缩工具,仿微信朋友圈压缩策略。
二.使用步骤
1.引入依赖
//图片压缩库
implementation 'top.zibin:Luban:1.1.8'
2.属性方法
方法 | 描述 |
---|---|
load | 传入原图 |
filter | 设置开启压缩条件 |
ignoreBy | 不压缩的阈值,单位为K |
setFocusAlpha | 设置是否保留透明通道 |
setTargetDir | 缓存压缩图片路径 |
setCompressListener | 压缩回调接口 |
setRenameListener | 压缩前重命名接口 |
3.使用
这个是在于拍照或从相册中选择图片上传前进行压缩的
/**
* todo onActivityResult 对拍照、相册选择图片的返回结果进行处理
* @param requestCode 返回码,用于确定是哪个 Activity 返回的数据
* @param resultCode 返回结果,一般如果操作成功返回的是 RESULT_OK
* @param data 返回对应 activity 返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
// 表示 调用照相机拍照
case REQUEST_CODE_FROM_CAMERA:
if(resultCode == RESULT_OK){
try {
// 获取输入流
FileInputStream is = new FileInputStream(mFilePath);
// 把流解析成bitmap,此时就得到了清晰的原图
Bitmap imageBitmap = BitmapFactory.decodeStream(is);
// 使用insertImage方法是要获取到写存储权限
Uri imageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),imageBitmap, "IMG"+ Calendar.getInstance().getTime() ,null));
//
imgString = UriToFile(imageUri);
getFile(imgString,imageUri,1);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
//相册
case REQUEST_CODE_FROM_PHOTO:
if(resultCode == RESULT_OK){
Uri uri = data.getData();
imgString = UriToFile(uri);
getFile(imgString,uri,2); //压缩并上传
}
break;
}
}
/**
* todo 使用 luban 第三方库 压缩图片
* @param path 原图片路径(String)
* @param uri
* @param flag
*/
private void getFile(String path,Uri uri,int flag) {
// File file = new File(path.getPath());//创建文件
Luban.with(this)
.load(path) // 传入要压缩的图片路径
.setCompressListener(new OnCompressListener() { // 设置回调
@Override
public void onStart() {
// 压缩开始前调用,可以在方法内启动 loading UI
}
@Override
public void onSuccess(File file) {
// 压缩成功后调用上传图片接口,File是压缩后的图片文件
upLoadImg(file.getPath(),uri,flag);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
}).launch();
}
/**
* todo 上传图片(api)
* @param imgString 压缩后的图片路径 (字符串)
* @param uri Uri图片资源
* @param flag 上传方式,取值1,2。1表示拍照,2表示相册
*/
private void upLoadImg(String imgString,Uri uri,int flag) {
//使用接口上传图片
}
上面对图片就可以进行压缩啦,当然,我上面是一张一张上传压缩,如果是一组的话,也很简单,稍微改下就可以
private void getFile1(List<String> images) {
Luban.with(this)
.load(images) // 传入要压缩的图片数组
.setCompressListener(new OnCompressListener() { // 设置回调
@Override
public void onStart() {
// 压缩开始前调用,可以在方法内启动 loading UI
}
@Override
public void onSuccess(File file) {
// 压缩成功后调用上传图片接口,File是压缩后的图片文件
upLoadImg1(file.getPath());
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
}).launch();
}
以上是关于android中图片压缩上传方法之Luban库的主要内容,如果未能解决你的问题,请参考以下文章