曾经在做手机上传图片的时候。直接获取相机拍摄的原图上传,原图大小一般1~2M。因此上传一张都比較浪费资源,有些场景还须要图片多张上传,所以近期查看了好多前辈写的关于图片处理的资料。然后试着改了一个图片压缩的方法。经測试用着还不错。压缩效果非常理想,主要是失真不明显。在这里分享一下。
以下直接上代码:
/**
* 上传server时把图片调用以下方法压缩后 保存到暂时目录 图片压缩后小于200KB。失真度不明显
*
* @param path
* @return
* @throws IOException
*/
public static Bitmap revitionImageSize(String path) throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
new File(path)));
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(in, null, options);
in.close();
int i = 0;
Bitmap bitmap = null;
// options.inJustDecodeBounds=true那么将不返回实际的bitmap对象,不给其分配内存空间可是能够得到一些解码边界信息即图片大小等信息
// outHeight(图片原始高度)和 outWidth(图片的原始宽度)
// inSampleSize表示缩略图大小为原始图片大小的几分之中的一个
// options.outWidth >> i(右移运算符)表示:outWidth/(2^i)
while (true) {
if ((options.outWidth >> i <= 2000)
&& (options.outHeight >> i <= 2000)) {
in = new BufferedInputStream(
new FileInputStream(new File(path)));
options.inSampleSize = (int) Math.pow(2.0D, i); // 幂运算 i为几次方
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(in, null, options);
break;
}
i += 1;
}
return bitmap;
}