Android图片压缩

主要有两种形式:

  1. 压缩图片的尺寸大小
  2. 压缩图片的质量(尺寸不变)

1.压缩尺寸

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath,options);// 计算 inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath,options);

关键的在于设置options.inSampleSize的值,当options.inSampleSize为1的时候不压缩,2的时候压缩一倍,options.inSampleSize的有效值是1、2、4、8、16......

2.压缩质量

这种方式压缩后的尺寸大小不变

Bitmap bitmap = BitmapUtil.decodeBitmapFromFile(path,1080,1080);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.PNG ;
if(options.outMimeType.equals("image/jpeg")){   
 compressFormat = Bitmap.CompressFormat.JPEG;
}
bitmap.compress(compressFormat,30,stream);

这里需要注意compressFormat的值一定要和原图一直,否则压缩会不成功。这里使用BitmapFactory.Options先测量出图片文件的信息,options.outMimeType就表示图片的mime类型。
不要用后缀名检测格式,后缀名都是虚的,用户可以自由修改。

使用

有时候一张图片的质量很小,但是尺寸很大,加载时可能出出现这个警告:
Bitmap too large to be uploaded into a texture (440x6405, max=4096x4096)
虽然不会抛出错误,但是图片会不显示出来。
这是硬件加速的一个限制,关闭硬件加速即可。

  • 通常压缩上传可以两种方式一起压缩。
  • ImageView控件显示图片一般使用尺寸压缩后显示。

你可能感兴趣的:(Android图片压缩)