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 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
- 前端圖片壓縮 - H5&Uni-App圖片壓縮前端H5APP
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- ??圖片壓縮CanvasCanvas
- canvas 壓縮圖片Canvas
- 圖片壓縮20201109
- 前端的圖片壓縮image-compressor(可在圖片上傳前實現圖片壓縮)前端
- 直播app開發搭建,Android studio 圖片壓縮APPAndroid
- 淺談移動端圖片壓縮(iOS & Android)iOSAndroid
- 大資料中批次壓縮與獨立壓縮的比較 - Bozho大資料
- iOS 圖片壓縮方法iOS
- 前端圖片壓縮方案前端
- Photoshop壓縮png圖片
- 圖片壓縮怎樣操作?分享幾種實用的批次圖片壓縮技巧
- 基於 NSData 的圖片壓縮
- Bitmap的圖片壓縮彙總
- 靠譜的少兒程式設計網站比較好用?程式設計網站
- excel檔案裡的圖片怎麼壓縮?excel檔案裡圖片的壓縮方法Excel
- 影像體積壓縮工具JPEG Jackal更好的壓縮圖片
- js上傳圖片壓縮JS
- SmallImage for Mac(圖片壓縮工具)Mac
- js圖片壓縮推薦JS
- JNI實現圖片壓縮
- vue 上傳圖片進行壓縮圖片Vue
- 【前端】壓縮圖片以及圖片相關概念前端
- Android微信分享圖片按質量壓縮的解決方案Android
- png格式如何壓縮,圖片壓縮工具哪個好
- 怎麼轉換圖片格式並壓縮圖片
- Android 圖片處理之固定視框中的等比例壓縮Android
- 可以買球賽的app 哪個app賭足球比較靠譜APP
- 利用 canvas 實現圖片壓縮Canvas
- 前端圖片壓縮及上傳前端
- Image Optimizer for Mac(圖片壓縮工具)Mac
- 圖片純前端JS壓縮的實現前端JS
- JPEG圖片的解碼和壓縮流程
- Linux下的好用的圖片壓縮軟體Linux
- Glide 原始碼分析(一):圖片壓縮IDE原始碼
- JS—圖片壓縮上傳(單張)JS