圖片的壓縮 (指定尺寸及比例壓縮)
阿新 • • 發佈:2018-12-28
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等等~~