国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁/技術(shù)文章
文章詳情頁

Android三種常見的圖片壓縮方式

瀏覽:3日期:2022-09-18 17:06:37
目錄1、質(zhì)量壓縮2、按比例壓縮(尺寸壓縮、采樣率壓縮)3、魯班壓縮(推薦)

下面就為大家?guī)?種比較常見的壓縮方式

先給出一組數(shù)據(jù)

原圖:width:2976; height:2976原圖實際:--->byte:2299820 Mb:2.19328質(zhì)量壓縮 size--->:byte:1599831 kb:1562.33496按比例壓縮 size--->:byte:191707 kb:187.21387魯班壓縮 size--->:byte:143792 kb:140.42188

壓縮效果:魯班壓縮 > 按比例壓縮 > 質(zhì)量壓縮

1、質(zhì)量壓縮

public void getBitmap(String imgPath, String outPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); newOpts.inJustDecodeBounds = false; newOpts.inPurgeable = true; newOpts.inInputShareable = true; // Do not compress newOpts.inSampleSize = 1; newOpts.inPreferredConfig = Config.RGB_565; storeImage(bitmap, outPath); //保存圖片 }

注意

質(zhì)量壓縮不會減少圖片的像素,它是在保持像素的前提下改變圖片的位深及透明度等,來達到壓縮圖片的目的,這也是為什么該方法叫質(zhì)量壓縮方法。所以這種方法,很可能不會減少圖片的大小 如果是bit.compress(CompressFormat.PNG, quality, baos);這樣的png格式,quality就沒有作用了,bytes.length不會變化,因為png圖片是無損的,不能進行壓縮

保存圖片

/** * 把bitmap轉(zhuǎn)化成圖片存儲在本地 * * @param bitmap * @param outPath 本地的存儲路徑 * @throws FileNotFoundException */ public static boolean storeImage(Bitmap bitmap, String outPath) throws FileNotFoundException {FileOutputStream os = new FileOutputStream(outPath);boolean compressResult = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);return compressResult; }2、按比例壓縮(尺寸壓縮、采樣率壓縮)

/** * 按比例壓縮 * * @param path 原圖片路徑 * @param targetW 壓縮后寬度 * @param targetH 壓縮后高度 * @return 壓縮后的圖片的保存路徑 */ public static String compressScale(String path,, String outPath, int targetW, int targetH) throws FileNotFoundException {// 獲取option BitmapFactory.Options options = new BitmapFactory.Options();// inJustDecodeBounds設(shè)置為true,這樣使用該option decode出來的Bitmap是null, // 只是把長寬存放到option中 options.inJustDecodeBounds = true;// 此時bitmap為null Bitmap bitmap = BitmapFactory.decodeFile(path, options);int inSampleSize = 1; // 1是不縮放 // 計算寬高縮放比例 int inSampleSizeW = options.outWidth / targetW;int inSampleSizeH = options.outHeight / targetH;// 最終取大的那個為縮放比例,這樣才能適配,例如寬縮放3倍才能適配屏幕,而 // 高不縮放就可以,那樣的話如果按高縮放,寬在屏幕內(nèi)就顯示不下了 if (inSampleSizeW > inSampleSizeH) { inSampleSize = inSampleSizeW;} else { inSampleSize = inSampleSizeH;}// 一定要記得將inJustDecodeBounds設(shè)為false,否則Bitmap為null options.inJustDecodeBounds = false;// 設(shè)置縮放比例(采樣率) options.inSampleSize = inSampleSize;bitmap = BitmapFactory.decodeFile(path, options);boolean isSuccess = storeImage(bitmap, outPath);if (isSuccess) { return outPath;}return ''; }

這種方法是設(shè)置圖片的采樣率,降低圖片像素,通過縮放圖片像素來減少圖片大小。

那么我又是如何來獲取圖片壓縮前后的大小的呢?

注意:這里的圖片的大小是指圖片的實際大小,不是bitmap在內(nèi)存中所占的大小,看壓縮效果,就得看圖片在文件中所占的大小。

/** * 獲取本地文件大小 * * @param imgPath 圖片的路徑 * @return 圖片實際的大小,單位byte */ public static int getFileSize(String imgPath) {int size = 0;try { FileInputStream fis = new FileInputStream(new File(imgPath)); size = fis.available();} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}return size; }3、魯班壓縮(推薦)

魯班壓縮是根據(jù)一種算法得出來的,壓縮效果基本上和微信一致,差不多在200k以內(nèi),圖片不失真。

魯班壓縮:https://github.com/Curzibn/Luban

build.gradle添加依賴

compile ’top.zibin:Luban:1.1.3’

private void lunBanPress(String path) {String pressPath = Environment.getExternalStorageDirectory().getPath();Luban.with(this).load(path) // 傳人要壓縮的圖片列表.ignoreBy(100) // 忽略不壓縮圖片的大小.setTargetDir(pressPath)// 設(shè)置壓縮后文件存儲位置.setCompressListener(new OnCompressListener() { //設(shè)置回調(diào) @Override public void onStart() {// TODO 壓縮開始前調(diào)用,可以在方法內(nèi)啟動 loading UILog.i(TAG, 'onStart:開始魯班壓縮 '); } @Override public void onSuccess(File file) {// TODO 壓縮成功后調(diào)用,返回壓縮后的圖片文件Glide.with(activity).load(file).into(iv2);Log.i(TAG, 'onSuccess: 魯班壓縮成功 :');try { int size = new FileInputStream(file).available(); Log.i('tag', '魯班壓縮 size--->:' + 'byte:' + size + ' kb:' + (float) size / 1024);} catch (IOException e) { e.printStackTrace();} } @Override public void onError(Throwable e) {// TODO 當壓縮過程出現(xiàn)問題時調(diào)用Log.i(TAG, 'onError: 魯班壓縮出錯'); }}).launch(); //啟動壓縮 }

源碼地址:https://github.com/zhouxu88/ImgCompress

到這里就結(jié)束啦~

以上就是Android三種常見的圖片壓縮方式的詳細內(nèi)容,更多關(guān)于Android 圖片壓縮的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Android
相關(guān)文章:
主站蜘蛛池模板: 日韩第五页 | 欧美亚洲国产人成aaa | 国产一区二区三区在线免费观看 | 亚洲码一区二区三区 | 亚洲一区二区影院 | 日本欧美久久久久免费播放网 | 亚洲一级片免费看 | 免费乱人伦 | 久久欧美| 91久久精品国产91久久性色也 | 久久成人免费观看草草影院 | 国产深夜福利在线观看网站 | 国产精品尹人在线观看免费 | 久久久久国产免费 | 欧美三级日韩 | 亚洲欧美高清在线 | 精品毛片 | 久久久久久久免费 | 亚洲成a人片毛片在线 | 日韩一级高清 | 亚洲精品国自产拍影院 | 国产精品美女久久久久网站 | 欧美精品免费看 | 俄罗斯特级毛片 | 欧美一区二区在线观看视频 | 看一级特黄a大片日本片 | 久久中文字幕免费视频 | 黄色一级毛片免费 | 一级国产a级a毛片无卡 | 欧美一级毛片高清免费观看 | 亚洲欧美另类专区 | 万全影院亚洲影院理论片 | 一级特一级特色生活片 | 成年人在线免费 | 亚洲精品视频久久 | 在线观看黄网视频免费播放 | 99爱视频在线观看 | 一区二区三区不卡在线观看 | 欧美一级特黄刺激爽大片 | 在线观看国产一区 | 国产精品美乳免费看 |