Android 图片压缩,图片保存,bitmap,图片框架压缩:
项目中经常会用到图片上传等,但是由于图片很大,需要压缩之后再进行相关处理
例如:拍照之后的图片需要上传到后端,后端进行保存,显示
自己手写图片压缩方法类:BitmapUtils
优点:对于编程能力有所提升,对源码有所了解 缺点:写的代码效率较低,压缩效果没有框架压缩效果好,比较费时
新建类:

接下来
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class BitmapUtils {
/**
* 质量压缩方法
* @param beforeBitmap 压缩前的图片bitmap
* @return 压缩图片的bitmap
*/
public static Bitmap compressImage(Bitmap beforeBitmap) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
if (beforeBitmap != null) {
beforeBitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
int options = 100;
while (bos.toByteArray().length / 1024 > 500) {
bos.reset();
beforeBitmap.compress(Bitmap.CompressFormat.PNG, options, bos);
options -= 10;
}
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
Bitmap afterBitmap = BitmapFactory.decodeStream(bis);
return afterBitmap;
}
return null;
}
static void saveBitmap(String path, Bitmap bm) {
File saveFile = new File(path);
try {
FileOutputStream saveImgOut = new FileOutputStream(saveFile);
bm.compress(Bitmap.CompressFormat.PNG, 90, saveImgOut);
saveImgOut.flush();
saveImgOut.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
调用:
BitmapUtils.saveBitmap(path, BitmapUtils.compressImage(bitmap));//压缩返回
图片压缩框架进行压缩:
优点:效果好,效果好 缺点:比较局限,需要导入依赖,如果是插件化开发的项目就比较局限
首先进行依赖添加:
compile 'top.zibin:Luban:1.1.8'

使用:
Luban.with(getActivity()) //context
.load(path) // 需要压缩的图片file
.ignoreBy(100) //压缩率 ,默认100
.filter(new CompressionPredicate() {
@Override
public boolean apply(String path) {
return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
}
})
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
// TODO 压缩开始前调用,可以在方法内启动 loading UI
}
@Override
public void onSuccess(File file) {
// TODO 压缩成功后调用,返回压缩后的图片文件
// 这个不是在主线程,跟新ui ,切换到主线程
}
@Override
public void onError(Throwable e) {
// TODO 当压缩过程出现问题时调用
}
}).launch();
总结:
两种方式都有优缺点,看个人的需求,新手肯定要从源码学起
框架引用:https://blog.youkuaiyun.com/qq_33209777/article/details/122472720
1018

被折叠的 条评论
为什么被折叠?



