您的位置:首页 > 移动开发 > Android开发

Android学习之图片压缩,压缩程度高且失真度小

2015-08-14 17:08 211 查看
以前在做手机上传图片的时候,直接获取相机拍摄的原图上传,原图大小一般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;
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: