1. 程式人生 > >圖片的壓縮 (指定尺寸及比例壓縮)

圖片的壓縮 (指定尺寸及比例壓縮)

1.壓縮到指定尺寸

//使用Bitmap加Matrix來縮放
    public static Drawable resizeImage(Bitmap bitmap, int w, int h) 
    {  
        Bitmap BitmapOrg = bitmap;  
        int width = BitmapOrg.getWidth();  
        int height = BitmapOrg.getHeight();  
        int newWidth = w;  
        int newHeight = h;  

        float
scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // if you want to rotate the Bitmap // matrix.postRotate(45); Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0
, 0, width, height, matrix, true); return new BitmapDrawable(resizedBitmap); }

優缺點分析:
優點 : 能將圖片壓縮導致定尺寸
缺點:比較耗費記憶體 要先獲取整個圖片載入到記憶體中 初始輸入的 Bitmap只能通過BitmapFactory.decodeFile(productPath);
原始圖片較大,會費記憶體

2.按照比例壓縮

//使用BitmapFactory.Options的inSampleSize引數來縮放
    public
static Drawable resizeImage2(String path, int width,int height) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;//不載入bitmap到記憶體中 BitmapFactory.decodeFile(path,options); int outWidth = options.outWidth; int outHeight = options.outHeight; options.inDither = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; options.inSampleSize = 1; if (outWidth != 0 && outHeight != 0 && width != 0 && height != 0) { int sampleSize=(outWidth/width+outHeight/height)/2; Log.d(tag, "sampleSize = " + sampleSize); options.inSampleSize = sampleSize; } options.inJustDecodeBounds = false; return new BitmapDrawable(BitmapFactory.decodeFile(path, options)); }

優缺點分析:
優點 :比較身記憶體,開始不需要載入整個圖片到記憶體中.只獲取原始圖片的寬高就可以了~
缺點:只能按照幾分之幾壓縮
options.inSampleSize
取樣率只能是int值,寬高只能壓縮到原來的1/2;1/3等等~~