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

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习之图片压缩,压缩程度高且失真度小相关的知识,希望对你有一定的参考价值。

        曾经在做手机上传图片的时候。直接获取相机拍摄的原图上传,原图大小一般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;
	}




以上是关于Android学习之图片压缩,压缩程度高且失真度小的主要内容,如果未能解决你的问题,请参考以下文章

Android-JNI开发系列《十》实践利用libjpeg-turbo完美压缩图片不失真

机器学习之K均值算法应用

vue图片压缩(不失真)

nginx学习之压缩解压篇

Linux学习之文件的压缩与解压

Linux学习之三:档案与文件系统的压缩与打包