以前在做手机上传图片的时候,直接获取相机拍摄的原图上传,原图大小一般1~2M,因此上传一张都比较浪费资源,有些场景还需要图片多张上传,所以最近查看了好多前辈写的关于图片处理的资料,然后试着改了一个图片压缩的方法。经测试用着还不错,压缩效果很理想,主要是失真不明显。在这里分享一下。
下面直接上代码:
/**
* 上传服务器时把图片调用下面方法压缩后 保存到临时文件夹 图片压缩后小于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;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u012527802/article/details/47664481