最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android圖片壓縮方法并壓縮到指定大小

 更新時間:2017年07月05日 14:16:02   作者:HiWorldNice  
本文給大家分享android圖片壓縮的三種方法并壓縮到指定大小,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧

一、圖片質(zhì)量壓縮

/** 
   * 質(zhì)量壓縮方法 
   * @param image 
   * @return 
   */  
  public static Bitmap compressImage(Bitmap image) {  
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中  
    int options = 90;  
    while (baos.toByteArray().length / 1024 > 100) { // 循環(huán)判斷如果壓縮后圖片是否大于100kb,大于繼續(xù)壓縮  
      baos.reset(); // 重置baos即清空baos  
      image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中  
      options -= 10;// 每次都減少10  
    }  
    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把壓縮后的數(shù)據(jù)baos存放到ByteArrayInputStream中  
    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream數(shù)據(jù)生成圖片  
    return bitmap;  
  }  

二、按比例大小壓縮 (路徑獲取圖片)

/** 
   * 圖片按比例大小壓縮方法 
   * @param srcPath (根據(jù)路徑獲取圖片并壓縮) 
   * @return 
   */  
  public static Bitmap getimage(String srcPath) {  
    BitmapFactory.Options newOpts = new BitmapFactory.Options();  
    // 開始讀入圖片,此時把options.inJustDecodeBounds 設(shè)回true了  
    newOpts.inJustDecodeBounds = true;  
    Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此時返回bm為空  
    newOpts.inJustDecodeBounds = false;  
    int w = newOpts.outWidth;  
    int h = newOpts.outHeight;  
    // 現(xiàn)在主流手機(jī)比較多是800*480分辨率,所以高和寬我們設(shè)置為  
    float hh = 800f;// 這里設(shè)置高度為800f  
    float ww = 480f;// 這里設(shè)置寬度為480f  
    // 縮放比。由于是固定比例縮放,只用高或者寬其中一個數(shù)據(jù)進(jìn)行計算即可  
    int be = 1;// be=1表示不縮放  
    if (w > h && w > ww) {// 如果寬度大的話根據(jù)寬度固定大小縮放  
      be = (int) (newOpts.outWidth / ww);  
    } else if (w < h && h > hh) {// 如果高度高的話根據(jù)寬度固定大小縮放  
      be = (int) (newOpts.outHeight / hh);  
    }  
    if (be <= 0)  
      be = 1;  
    newOpts.inSampleSize = be;// 設(shè)置縮放比例  
    // 重新讀入圖片,注意此時已經(jīng)把options.inJustDecodeBounds 設(shè)回false了  
    bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
    return compressImage(bitmap);// 壓縮好比例大小后再進(jìn)行質(zhì)量壓縮  
  }  

三、按比例大小壓縮 (Bitmap)

/** 
   * 圖片按比例大小壓縮方法 
   * @param image (根據(jù)Bitmap圖片壓縮) 
   * @return 
   */  
  public static Bitmap compressScale(Bitmap image) {  
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
    // 判斷如果圖片大于1M,進(jìn)行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢出  
    if (baos.toByteArray().length / 1024 > 1024) {  
      baos.reset();// 重置baos即清空baos  
      image.compress(Bitmap.CompressFormat.JPEG, 80, baos);// 這里壓縮50%,把壓縮后的數(shù)據(jù)存放到baos中  
    }  
    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  
    BitmapFactory.Options newOpts = new BitmapFactory.Options();  
    // 開始讀入圖片,此時把options.inJustDecodeBounds 設(shè)回true了  
    newOpts.inJustDecodeBounds = true;  
    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
    newOpts.inJustDecodeBounds = false;  
    int w = newOpts.outWidth;  
    int h = newOpts.outHeight;  
    Log.i(TAG, w + "---------------" + h);  
    // 現(xiàn)在主流手機(jī)比較多是800*480分辨率,所以高和寬我們設(shè)置為  
    // float hh = 800f;// 這里設(shè)置高度為800f  
    // float ww = 480f;// 這里設(shè)置寬度為480f  
    float hh = 512f;  
    float ww = 512f;  
    // 縮放比。由于是固定比例縮放,只用高或者寬其中一個數(shù)據(jù)進(jìn)行計算即可  
    int be = 1;// be=1表示不縮放  
    if (w > h && w > ww) {// 如果寬度大的話根據(jù)寬度固定大小縮放  
      be = (int) (newOpts.outWidth / ww);  
    } else if (w < h && h > hh) { // 如果高度高的話根據(jù)高度固定大小縮放  
      be = (int) (newOpts.outHeight / hh);  
    }  
    if (be <= 0)  
      be = 1;  
    newOpts.inSampleSize = be; // 設(shè)置縮放比例  
    // newOpts.inPreferredConfig = Config.RGB_565;//降低圖片從ARGB888到RGB565  
    // 重新讀入圖片,注意此時已經(jīng)把options.inJustDecodeBounds 設(shè)回false了  
    isBm = new ByteArrayInputStream(baos.toByteArray());  
    bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
    return compressImage(bitmap);// 壓縮好比例大小后再進(jìn)行質(zhì)量壓縮  
    //return bitmap;  
  }  

以上所述是小編給大家介紹的Android圖片壓縮方法并壓縮到指定大小,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android 基于Bitmap的四種圖片壓縮方式

    Android 基于Bitmap的四種圖片壓縮方式

    本文中探究的圖片壓縮方式主要是基于 Bitmap 的 api 實現(xiàn)。文中探究實現(xiàn)的壓縮方式有四種:質(zhì)量壓縮、采樣率壓縮、Matrix 縮放壓縮、圖片編碼格式壓縮,感興趣的朋友可以參考下
    2021-05-05
  • Android?利用OpenCV制作人臉檢測APP

    Android?利用OpenCV制作人臉檢測APP

    本篇文章手把手教大家使用OpenCV來實現(xiàn)一個能在安卓手機(jī)上運(yùn)行的人臉檢測APP。其實不僅僅是能檢測人臉,還能檢測鼻子,嘴巴,眼睛和耳朵。需要的朋友可以參考一下
    2021-12-12
  • android通過自定義toast實現(xiàn)懸浮通知效果的示例代碼

    android通過自定義toast實現(xiàn)懸浮通知效果的示例代碼

    這篇文章主要介紹了android通過自定義toast實現(xiàn)懸浮通知效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Android使用Canvas?2D實現(xiàn)循環(huán)菜單效果

    Android使用Canvas?2D實現(xiàn)循環(huán)菜單效果

    循環(huán)菜單有很多種自定義方式,我們可以利用ViewPager或者RecyclerView?+?CarouselLayoutManager?或者RecyclerView?+?PageSnapHelper來實現(xiàn)這種效果,今天我們使用Canvas?2D來實現(xiàn)這種效果,感興趣的朋友可以參考下
    2024-01-01
  • Android MessageQueue消息隊列主要作用詳解

    Android MessageQueue消息隊列主要作用詳解

    Android 消息機(jī)制主要指的是 Handler 的運(yùn)行機(jī)制及其所依賴的 MessageQueue 和 Looper 的工作過程,Handler、MessageQueue、Looper組成一個相互聯(lián)系的整體。本文先從 MessageQueue 的源碼來說明其實現(xiàn)原理
    2023-02-02
  • android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式示例

    android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式示例

    本篇文章主要介紹了android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • Android DatePicker和DatePickerDialog基本用法示例

    Android DatePicker和DatePickerDialog基本用法示例

    這篇文章主要介紹了Android DatePicker和DatePickerDialog基本用法,實例分析了DatePicker和DatePickerDialog控件針對手機(jī)時間設(shè)置的相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • 分析Android中線程和線程池

    分析Android中線程和線程池

    我們知道線程是CPU調(diào)度的最小單位。在Android中主線程是不能夠做耗時操作的,子線程是不能夠更新UI的。在Android中,除了Thread外,扮演線程的角色有很多,如AsyncTask,IntentService和HandlerThread等等。本文將介紹Android中線程和線程池。
    2021-06-06
  • Kotlin擴(kuò)展函數(shù)超詳細(xì)介紹

    Kotlin擴(kuò)展函數(shù)超詳細(xì)介紹

    Kotlin?可以為一個不能修改的或來自第三方庫中的類編寫一個新的函數(shù)。?這個新增的函數(shù)就像那個原始類本來就有的函數(shù)一樣,可以用普通的方法調(diào)用,這種機(jī)制的函數(shù)稱為擴(kuò)展函數(shù)
    2022-09-09
  • 漂亮的Android音樂歌詞控件 仿網(wǎng)易云音樂滑動效果

    漂亮的Android音樂歌詞控件 仿網(wǎng)易云音樂滑動效果

    這篇文章主要為大家詳細(xì)介紹了漂亮的Android音樂歌詞控件,仿網(wǎng)易云音樂滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

盱眙县| 新沂市| 宜兴市| 永城市| 普宁市| 凤阳县| 西宁市| 乳源| 老河口市| 盖州市| 习水县| 吉木乃县| 昌都县| 龙口市| 汶川县| 佛学| 博爱县| 衡南县| 浦城县| 陆丰市| 高陵县| 大连市| 巴林左旗| 金湖县| 基隆市| 土默特右旗| 拉孜县| 丰宁| 扶沟县| 杭锦后旗| 天祝| 井陉县| 温宿县| 玉树县| 兴海县| 南澳县| 四子王旗| 景宁| 宜都市| 克拉玛依市| 郑州市|