Bitmap压缩到指定大小:

private void imageZoom() {
//图片允许最大空间 单位:KB
double maxSize =400.00;
//将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
//将字节换成KB
double mid = b.length/1024;
//判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
if (mid > maxSize) {
//获取bitmap大小 是允许最大大小的多少倍
double i = mid / maxSize;
//开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
bitMap = zoomImage(bitMap, bitMap.getWidth() / Math.sqrt(i),
bitMap.getHeight() / Math.sqrt(i));
}
}



public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
double newHeight) {
// 获取这个图片的宽和高
float width = bgimage.getWidth();
float height = bgimage.getHeight();
// 创建操作图片用的matrix对象
Matrix matrix = new Matrix();
// 计算宽高缩放率
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 缩放图片动作
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
(int) height, matrix, true);
return bitmap;
}

压缩后的图片比预期要大10% 原因可能是bitmap图的宽高不一致,导致压缩误差!

更多相关文章

  1. 将图片存储到Sqlite和取出
  2. Android(安卓)绘制一个Loading动画__向图片中缓慢填充颜色,从而
  3. Android(安卓)如何实现欢迎界面(Splash Screen)
  4. Android(安卓)OKHttp3的使用和下载/上传图片
  5. Android(安卓)SeekBar控件详解
  6. 内存泄漏优化---Bitmap优化
  7. android在学习——Menu背景图片,背景色的设置
  8. Android仿网易新闻图片详情下滑隐藏效果示例代码
  9. 使用ContentProvider管理多媒体内容

随机推荐

  1. Android(安卓)ActionBar以及menu的代码设
  2. python in android
  3. Android中从图库中选取图片实例详解
  4. Android中给webview设置代理
  5. Android Data Backup
  6. Android原生拼音输入法分析
  7. 修改android开机logo
  8. Android查询不到电话号码解决方法
  9. imageView的Selector图片选择问题
  10. Android 唯一标识获取