Bitmap压缩用到的场景:{
1.移动端上传文件需要对本地拍摄保存的文件压缩:图片的缩放比例换算 大小的压缩
2.加载本地图片显示View位图所需要的图片大小并没有那么大
3.图片缓存:请求服务器上的资源缓存到内存或者本地存储提高缓存加载速率
}
Bitmap缓存的优点:1.减少内存开销读取和存储更快 2.提高App流畅度
1.采样率压缩:
BitmapFactory.Options options = new BitmapFactory.Options(); //获取Bitmap工厂类
options.inJustDecodeBounds = true; //true 只返回Bitmap宽高 false 返回Bitmap对象实体
BitmapFactory.decodeFile(fileUrl, options);
int width = options.outWidth;
int height = options.outHeight;
int inSampleSize = 1; //采样率:采样率以1/2++ 形式换算
//根据输入的宽高换算采样率
if (height > outHeight || width > outWith) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
while ((halfHeight / inSampleSize) >= outHeight &&
(halfWidth / inSampleSize) >= outWith) {
inSampleSize *= 2;
}
}
2.质量压缩:
//进行有损压缩
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int options_ = 100;
actualOutBitmap.compress(Bitmap.CompressFormat.JPEG, options_, baos);//质量压缩方法,把压缩后的数据存放到baos中 (100表示不压缩,0表示压缩到最小)
int baosLength = baos.toByteArray().length;
while (baosLength / 1024 > maxFileSize) {//循环判断如果压缩后图片是否大于maxMemmorrySize,大于继续压缩
baos.reset();//重置baos即让下一次的写入覆盖之前的内容
options_ = Math.max(0, options_ - 10);//图片质量每次减少10
actualOutBitmap.compress(Bitmap.CompressFormat.JPEG, options_, baos);//将压缩后的图