Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習之圖片壓縮,壓縮程度高且失真度小

Android學習之圖片壓縮,壓縮程度高且失真度小

編輯:關於Android編程

以前在做手機上傳圖片的時候,直接獲取相機拍攝的原圖上傳,原圖大小一般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;
	}
 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved