492
技術社區[雲棲]
Android中進行圖像壓縮和縮放
這裏將的是隻使用 Android 中自帶的庫進行簡單的圖像縮放和壓縮, 如果對圖像處理有更多要求的話, 建議使用其他的庫, 這裏使用自帶庫進行操作適合圖片處理沒不是主要邏輯的項目, 簡單的隻是想縮小或壓縮圖片.
這裏簡單的將一個圖片文件轉換為 Bitmap ,並且在轉換的過程中對圖片質量進行簡單壓縮:
bitmap.compress(Bitmap.CompressFormat.JPEG, int quality, FileOutputStream fos);
注意這裏的 quality 的範圍為 0~100 ,經過測試如果這個值設置比較低的話圖片會非常不清晰, 基本不可用, 0~100 的值可以參考類似Photoshop之類輸出圖片時選擇的圖片質量.
此方法隻是單純對圖片質量進行處理, 並不會改變其大小, 如果需要改變圖片文件的大小, 最好是使用縮放, 這個可以在保證一定的圖片清晰度的情況下減少了圖片大小, 畢竟手機屏幕就那麼點, 你把 2000px * 1000px 的圖片改為 500px * 250px 在手機用戶看來也不會有太嚴重的不適感, 而如果你隻設置圖片的 quality 想來改變文件大小, 你最後會發現得到的是一個 2000px * 1000px 的幾個色塊.
先提代碼看看:
/** * 保持長寬比縮小Bitmap * * @param bitmap * @param maxWidth * @param maxHeight * @return */ public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) { int originWidth = bitmap.getWidth(); int originHeight = bitmap.getHeight(); // no need to resize if (originWidth < maxWidth && originHeight < maxHeight) { return bitmap; } int width = originWidth; int height = originHeight; // 若圖片過寬, 則保持長寬比縮放圖片 if (originWidth > maxWidth) { width = maxWidth; double i = originWidth * 1.0 / maxWidth; height = (int) Math.floor(originHeight / i); bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); } // 若圖片過長, 則從上端截取 if (height > maxHeight) { height = maxHeight; bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height); } // Log.i(TAG, width + " width"); // Log.i(TAG, height + " height"); return bitmap; }
這裏演示是將圖片縮小到一個max範圍內, 而不是直接將變成硬性的變成某個尺寸的圖片, 因為一般來說這種設置max的方式符合大部分需要, 如果必須將圖片變成某個指定尺寸可以直接使用 Bitmap.createScaledBitmap 方法, 也是下麵要介紹的.
此函數主要就是使用了 Bitmap 的兩個靜態方法, 一個是:
public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
此方法就會把一個 Bitmap 圖片 縮放 成指定的尺寸.
而這裏還使用到了另一個方法:
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)
此處使用該方法的目的是 剪切 圖片, 就是隻取圖片的某個區域, 從而達到 剪切 圖片的效果.
最後更新:2017-04-02 16:48:11