Android学习之压缩图片到指定大小

关于图片压缩,是为了上传服务器时有些地方有大小限制,因此,这里我总结了两种方法,个人感觉方法一比较准确一点。

方法一:

	 * 图片压缩方法一
	 * 
	 * 计算 bitmap大小,如果超过64kb,则进行压缩
	 * 
	 * @param bitmap
	 * @return
	 */
	private Bitmap ImageCompressL(Bitmap bitmap) {
		double targetwidth = Math.sqrt(64.00 * 1000);
		if (bitmap.getWidth() > targetwidth || bitmap.getHeight() > targetwidth) {
			// 创建操作图片用的matrix对象
			Matrix matrix = new Matrix();
			// 计算宽高缩放率
			double x = Math.max(targetwidth / bitmap.getWidth(), targetwidth
					/ bitmap.getHeight());
			// 缩放图片动作
			matrix.postScale((float) x, (float) x);
			bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
					bitmap.getHeight(), matrix, true);
		}
		return bitmap;
	}

方法二:

	 * 图片压缩方法二(不太准确)
	 * 
	 * 计算 bitmap大小,如果超过64kb,则进行压缩
	 * 
	 * @param bitmap
	 */
	private Bitmap ImageCompress(Bitmap bitmap) {
		// 图片允许最大空间 单位:KB
		double maxSize = 64.00;
		// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
		byte[] b = baos.toByteArray();
		// 将字节换成KB
		double mid = b.length / 1024;
		// 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
		if (mid > maxSize) {
			// 获取bitmap大小 是允许最大大小的多少倍
			double i = mid / maxSize;
			// 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍
			bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),
					bitmap.getHeight() / Math.sqrt(i));
		}
		return bitmap;
	}

	/***
	 * 图片压缩方法二
	 * 
	 * @param bgimage
	 *            :源图片资源
	 * @param newWidth
	 *            :缩放后宽度
	 * @param newHeight
	 *            :缩放后高度
	 * @return
	 */
	public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {
		// 获取这个图片的宽和高
		float width = bgimage.getWidth();
		float height = bgimage.getHeight();
		// 创建操作图片用的matrix对象
		Matrix matrix = new Matrix();
		// 计算宽高缩放率
		float scaleWidth = ((float) newWidth) / width;
		float scaleHeight = ((float) newHeight) / height;
		// 缩放图片动作
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
				(int) height, matrix, true);
		return bitmap;
	}


你可能感兴趣的:(压缩,android,图片,指定大小)