Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習之壓縮圖片到指定大小

Android學習之壓縮圖片到指定大小

編輯:關於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;
	}

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved