android下圖片壓縮
第一:我們先看下質量壓縮方法:
- private Bitmap compressImage(Bitmap image) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裡100表示不壓縮,把壓縮後的資料存放到baos中
- int options = 100;
- while ( baos.toByteArray().length / 1024>100) { //迴圈判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮
- baos.reset();//重置baos即清空baos
- image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裡壓縮options%,把壓縮後的資料存放到baos中
- options -= 10;//每次都減少10
- }
- ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮後的資料baos存放到ByteArrayInputStream中
- Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream資料生成圖片
- return bitmap;
- }
private Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裡100表示不壓縮,把壓縮後的資料存放到baos中
int options = 100;
while ( baos.toByteArray().length / 1024>100) { //迴圈判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裡壓縮options%,把壓縮後的資料存放到baos中
options -= 10;//每次都減少10
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮後的資料baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream資料生成圖片
return bitmap;
}
第二:圖片按比例大小壓縮方法(根據路徑獲取圖片並壓縮):
- private Bitmap getimage(String srcPath) {
- BitmapFactory.Options newOpts = new BitmapFactory.Options();
- //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了
- newOpts.inJustDecodeBounds = true;
- Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此時返回bm為空
- newOpts.inJustDecodeBounds = false;
- int w = newOpts.outWidth;
- int h = newOpts.outHeight;
- //現在主流手機比較多是800*480解析度,所以高和寬我們設定為
- float hh = 800f;//這裡設定高度為800f
- float ww = 480f;//這裡設定寬度為480f
- //縮放比。由於是固定比例縮放,只用高或者寬其中一個資料進行計算即可
- int be = 1;//be=1表示不縮放
- if (w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放
- be = (int) (newOpts.outWidth / ww);
- } else if (w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放
- be = (int) (newOpts.outHeight / hh);
- }
- if (be <= 0)
- be = 1;
- newOpts.inSampleSize = be;//設定縮放比例
- //重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了
- bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
- return compressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
- }
private Bitmap getimage(String srcPath) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds 設回true了
newOpts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此時返回bm為空
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
//現在主流手機比較多是800*480解析度,所以高和寬我們設定為
float hh = 800f;//這裡設定高度為800f
float ww = 480f;//這裡設定寬度為480f
//縮放比。由於是固定比例縮放,只用高或者寬其中一個資料進行計算即可
int be = 1;//be=1表示不縮放
if (w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0)
be = 1;
newOpts.inSampleSize = be;//設定縮放比例
//重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了
bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
return compressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
}
第三:圖片按比例大小壓縮方法(根據Bitmap圖片壓縮):
- private Bitmap comp(Bitmap image) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
- if( baos.toByteArray().length / 1024>1024) {//判斷如果圖片大於1M,進行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢位
- baos.reset();//重置baos即清空baos
- image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//這裡壓縮50%,把壓縮後的資料存放到baos中
- }
- ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
- BitmapFactory.Options newOpts = new BitmapFactory.Options();
- //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了
- newOpts.inJustDecodeBounds = true;
- Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
- newOpts.inJustDecodeBounds = false;
- int w = newOpts.outWidth;
- int h = newOpts.outHeight;
- //現在主流手機比較多是800*480解析度,所以高和寬我們設定為
- float hh = 800f;//這裡設定高度為800f
- float ww = 480f;//這裡設定寬度為480f
- //縮放比。由於是固定比例縮放,只用高或者寬其中一個資料進行計算即可
- int be = 1;//be=1表示不縮放
- if (w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放
- be = (int) (newOpts.outWidth / ww);
- } else if (w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放
- be = (int) (newOpts.outHeight / hh);
- }
- if (be <= 0)
- be = 1;
- newOpts.inSampleSize = be;//設定縮放比例
- //重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了
- isBm = new ByteArrayInputStream(baos.toByteArray());
- bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
- return compressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
- }
相關文章
- Android壓縮圖片後再上傳圖片Android
- Android 載入大圖片,不壓縮圖片Android
- Android 中圖片壓縮分析(上)Android
- 前端圖片壓縮 - H5&Uni-App圖片壓縮前端H5APP
- ??圖片壓縮CanvasCanvas
- IOS圖片壓縮iOS
- canvas 壓縮圖片Canvas
- android圖片壓縮不失真實戰Android
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- 圖片壓縮知識梳理(0) 圖片壓縮學習計劃
- Android-圖片壓縮(二)-純乾貨Android
- android 比較靠譜的圖片壓縮Android
- 仿寫一個android圖片壓縮工具Android
- Android 圖片壓縮方法分析與學習Android
- iOS 圖片壓縮方法iOS
- 前端圖片壓縮方案前端
- 前端的圖片壓縮image-compressor(可在圖片上傳前實現圖片壓縮)前端
- 淺談移動端圖片壓縮(iOS & Android)iOSAndroid
- 簡單實用的android 圖片的壓縮Android
- Android如何壓縮圖片上傳服務端Android服務端
- Android-壓縮大圖到容量超小的圖片Android
- Android 高清載入巨圖方案 拒絕壓縮圖片Android
- SmallImage for Mac(圖片壓縮工具)Mac
- js上傳圖片壓縮JS
- js圖片壓縮推薦JS
- JNI實現圖片壓縮
- java後臺壓縮圖片Java
- 【前端】壓縮圖片以及圖片相關概念前端
- vue 上傳圖片進行壓縮圖片Vue
- 圖片壓縮怎樣操作?分享幾種實用的批次圖片壓縮技巧
- png格式如何壓縮,圖片壓縮工具哪個好
- Linux下的好用的圖片壓縮軟體Linux
- 直播app開發搭建,Android studio 圖片壓縮APPAndroid
- Android圖片壓縮實現過程及程式碼Android
- 圖片壓縮不求人,3個親測實用高效的圖片壓縮神器
- 怎麼轉換圖片格式並壓縮圖片
- 前端圖片壓縮及上傳前端
- 利用 canvas 實現圖片壓縮Canvas