閱讀492 返回首頁    go 技術社區[雲棲]


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

  上一篇:go 在ubuntu部署hadoop之單機模式與偽分布式模式部署
  下一篇:go linux 平台 apache +tomcat 集群配置