目前存在两种压缩图片方式:
- 质量压缩 - 不改变图片尺寸。
- 按比例压缩 - 相当于是在像素上进行压缩。
而图片有三种存在形式:
- file - 磁盘。
- stream - 网络传输、内存。
- bitmap - 内存。
bigmap 在内存中的大小是按像素计算的,也就是width * height,所以如果需要在 Android 中显示照片,那么就必须进行按比例压缩,避免因为内存消耗过大,导致 APP 退出。
/**
* 按比例压缩
*
* @param path 图片路径
* @param width 宽度(像素)
* @param height 高度(像素)
* @return
*/
public Bitmap ratioCompress(String path, float width, float height) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;//一个像素存储两个字节,默认为一个像素存储四个字节
options.inJustDecodeBounds = true;//允许接下来直接得到 Bitmap 对象而不会消耗内存
Bitmap bitmap = BitmapFactory.decodeFile(path, options);//只是空的 Bitmap 对象
int outWidth = options.outWidth;
int outHeight = options.outHeight;
/**
* 计算缩放比
*/
int ratio = 1;//缩放比,1 表示不缩放
if (outWidth > outHeight && outWidth > width) {//按照宽度进行缩放
ratio = (int) (outWidth / width);
} else if (outWidth < outHeight && outHeight > height) {//按照高度进行缩放
ratio = (int) (outHeight / height);
}
if (ratio <= 0) {
ratio = 1;
}
options.inSampleSize = ratio;//设置缩放比
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(path, options);//压缩
}
是不是很简单呀 O(∩_∩)O哈哈~
网友评论