标签:
一。图片的存在形式
1. 文件(二进制存在于硬盘上)
2. 流的形式(二进制存在于内存中)
3、bitmap形式
不同:文件形式和流的形式对图片体积大小并没有影响,也就是说,如果你手机SD卡上的如果是100K,那么通过流的形式读到内存中,也一定是占100K的内存,注意是流的形式。
当图片手bitmap形式存在时,占用的内存会变大很多,我试过500K文件形式的图片加载到内存,以Bitmap形式存在时,占用内存将近10M,当然这个增大的倍数并不是固定的.
public static void compressBmpToFile(Bitmap bmp,File file){
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int options = 80;//个人喜欢从80开始,
		bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
		while (baos.toByteArray().length / 1024 > 100) { 
			baos.reset();
			options -= 10;
			bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
		}
		try {
			FileOutputStream fos = new FileOutputStream(file);
			fos.write(baos.toByteArray());
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
方法说明 :
这个方法是压缩图片的质量,但是不会减少图片的像素,比如你的图片是300k的,1280*700像素的,经过这种方法的压缩后,File形式的图片是100以下 ,以方便上传 到服务器,但是当 BitmapFactory.decodeFile()到内存中,变成Bitmap时,他的像素还是1280*700,图片像素的计算方法是bitmap.getWidth和bitmap.getHeight(),
private Bitmap compressBmpFromBmp(Bitmap image) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int options = 100;
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
		while (baos.toByteArray().length / 1024 > 100) { 
			baos.reset();
			options -= 10;
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
		return bitmap;
	}
后面的几个方法和之前的一样的
标签:
原文地址:http://www.cnblogs.com/chuiyuan/p/4245552.html