亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android bitmap compress(圖片壓縮)代碼

2020-04-11 12:16:37
字體:
來源:轉載
供稿:網友

android的照相功能隨著手機硬件的發展,變得越來越強大,能夠找出很高分辨率的圖片。
有些場景中,需要照相并且上傳到服務,但是由于圖片的大小太大,那么就上傳就會很慢(在有些網絡情況下),而且很耗流量,要想速度快,那么就需要減小圖片的大小。減少圖片的大小有兩種方法,1. 照小圖片; 2. 壓縮大圖片。 照相時獲取小圖片一般不太符合要求,因為,圖片的清晰度會很差,但是這種情況有個好處就是應用速度會快些; 壓縮圖片,就是把大圖片壓縮小,降低圖片的質量,在一定范圍內,降低圖片的大小,并且滿足需求(圖片仍就清晰)。下面組要是介紹圖片的壓縮:


1. 照相請查看//www.49028c.com/article/37760.htm ->想要保存圖片到制定目錄,啟動Camera應用時,需要指定文件
2. 壓縮過程:
    2.1 從圖片路徑中讀取圖片(圖片很大,不能全部加在到內存中處理,要是全部加載到內存中會內存溢出)
[java]

復制代碼 代碼如下:

final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, options);

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, 480, 800);

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false;

    Bitmap bm = BitmapFactory.decodeFile(filePath, options);

 final BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(filePath, options);

  // Calculate inSampleSize
  options.inSampleSize = calculateInSampleSize(options, 480, 800);

  // Decode bitmap with inSampleSize set
  options.inJustDecodeBounds = false;

  Bitmap bm = BitmapFactory.decodeFile(filePath, options);


2.2 處理圖片旋轉 
[java]
復制代碼 代碼如下:

int degree = readPictureDegree(filePath);
        bm = rotateBitmap(bm,degree) ;

int degree = readPictureDegree(filePath);
  bm = rotateBitmap(bm,degree) ;[java] view plaincopyprint?private static int readPictureDegree(String path) {  
           int degree  = 0;  
           try {  
                   ExifInterface exifInterface = new ExifInterface(path);  
                   int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);  
                   switch (orientation) {  
                   case ExifInterface.ORIENTATION_ROTATE_90:  
                           degree = 90;  
                           break;  
                   case ExifInterface.ORIENTATION_ROTATE_180:  
                           degree = 180;  
                           break;  
                   case ExifInterface.ORIENTATION_ROTATE_270:  
                           degree = 270;  
                           break;  
                   }  
           } catch (IOException e) {  
                   e.printStackTrace();  
           }  
           return degree;  
       } 

private static int readPictureDegree(String path) {
        int degree  = 0;
        try {
                ExifInterface exifInterface = new ExifInterface(path);
                int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
                }
        } catch (IOException e) {
                e.printStackTrace();
        }
        return degree;
    }


[java]
復制代碼 代碼如下:

view plaincopyprint?private static Bitmap rotateBitmap(Bitmap bitmap, int rotate){
        if(bitmap == null)
            return null ;

        int w = bitmap.getWidth();
        int h = bitmap.getHeight();

        // Setting post rotate to 90 
        Matrix mtx = new Matrix();
        mtx.postRotate(rotate);
        return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
    }

private static Bitmap rotateBitmap(Bitmap bitmap, int rotate){
  if(bitmap == null)
   return null ;

  int w = bitmap.getWidth();
  int h = bitmap.getHeight();

  // Setting post rotate to 90
  Matrix mtx = new Matrix();
  mtx.postRotate(rotate);
  return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
 }


2.3壓縮圖片      
[java]
復制代碼 代碼如下:

bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);//30 是壓縮率,表示壓縮70%; 如果不壓縮是100,表示壓縮率為0

bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);//30 是壓縮率,表示壓縮70%; 如果不壓縮是100,表示壓縮率為0


完整的方法代碼:
[java]
復制代碼 代碼如下:

public static Bitmap getSmallBitmap(String filePath) {

        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize 
        options.inSampleSize = calculateInSampleSize(options, 480, 800);

        // Decode bitmap with inSampleSize set 
        options.inJustDecodeBounds = false;

        Bitmap bm = BitmapFactory.decodeFile(filePath, options);
        if(bm == null){
            return  null;
        }
        int degree = readPictureDegree(filePath);
        bm = rotateBitmap(bm,degree) ;
        ByteArrayOutputStream baos = null ;
        try{
            baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);

        }finally{
            try {
                if(baos != null)
                    baos.close() ;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return bm ;

    }

public static Bitmap getSmallBitmap(String filePath) {

  final BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(filePath, options);

  // Calculate inSampleSize
  options.inSampleSize = calculateInSampleSize(options, 480, 800);

  // Decode bitmap with inSampleSize set
  options.inJustDecodeBounds = false;

  Bitmap bm = BitmapFactory.decodeFile(filePath, options);
  if(bm == null){
   return  null;
  }
  int degree = readPictureDegree(filePath);
  bm = rotateBitmap(bm,degree) ;
  ByteArrayOutputStream baos = null ;
  try{
   baos = new ByteArrayOutputStream();
   bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);

  }finally{
   try {
    if(baos != null)
     baos.close() ;
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return bm ;

 }


[java]
復制代碼 代碼如下:

view plaincopyprint?private static int calculateInSampleSize(BitmapFactory.Options options,
            int reqWidth, int reqHeight) {
        // Raw height and width of image 
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {

            // Calculate ratios of height and width to requested height and 
            // width 
            final int heightRatio = Math.round((float) height
                    / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            // Choose the smallest ratio as inSampleSize value, this will 
            // guarantee 
            // a final image with both dimensions larger than or equal to the 
            // requested height and width. 
            inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio;
        }

        return inSampleSize;
    }

private static int calculateInSampleSize(BitmapFactory.Options options,
   int reqWidth, int reqHeight) {
  // Raw height and width of image
  final int height = options.outHeight;
  final int width = options.outWidth;
  int inSampleSize = 1;

  if (height > reqHeight || width > reqWidth) {

   // Calculate ratios of height and width to requested height and
   // width
   final int heightRatio = Math.round((float) height
     / (float) reqHeight);
   final int widthRatio = Math.round((float) width / (float) reqWidth);

   // Choose the smallest ratio as inSampleSize value, this will
   // guarantee
   // a final image with both dimensions larger than or equal to the
   // requested height and width.
   inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio;
  }

  return inSampleSize;
 }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲综合久久| 欧美裸体xxxx极品少妇| 亚洲精品国产精品自产a区红杏吧| 日韩在线视频线视频免费网站| 成人网在线观看| 国产欧美日韩中文字幕在线| 久久综合88中文色鬼| 亚洲最大成人免费视频| 国产成人亚洲综合91| 亚洲国产成人av在线| 亚洲黄色av网站| 日本精品视频在线播放| 日韩国产欧美精品一区二区三区| 57pao成人永久免费视频| 成人性生交大片免费看小说| 欧美福利小视频| 久久99热这里只有精品国产| 国产亚洲福利一区| 亚洲欧美日韩中文在线| 亚洲乱码av中文一区二区| 九九久久久久久久久激情| 国产精品6699| 九九久久国产精品| 国产乱人伦真实精品视频| 欧美精品免费看| 亚洲精品456在线播放狼人| 亚洲男人天堂网| 欧美成人国产va精品日本一级| 久久久久久久影院| 国产精品久久婷婷六月丁香| 欧美老女人性视频| 欧美精品日韩www.p站| 久热精品视频在线观看一区| 久久视频在线免费观看| 欧美一级视频在线观看| 国产精品久久久久久久美男| 乱亲女秽乱长久久久| 国产成+人+综合+亚洲欧洲| www.亚洲一区| 色久欧美在线视频观看| 欧美日韩激情网| 亚洲精品天天看| 亚洲人精选亚洲人成在线| 亚洲女性裸体视频| 日韩电影免费观看中文字幕| 国产在线播放91| 国产精品国产三级国产aⅴ9色| 91沈先生在线观看| 亚洲大胆人体视频| 国产亚洲欧洲高清一区| 亚洲精品国产综合区久久久久久久| 亚洲欧美国内爽妇网| 欧美成人sm免费视频| 亚洲精品久久久久中文字幕欢迎你| 国产亚洲欧美日韩精品| 欧美日韩一区二区精品| 亚洲qvod图片区电影| 亚洲自拍小视频| 性亚洲最疯狂xxxx高清| 国产一区视频在线播放| 欧美与黑人午夜性猛交久久久| 中文字幕视频一区二区在线有码| 成人观看高清在线观看免费| 91免费人成网站在线观看18| 91精品视频专区| 欧美与欧洲交xxxx免费观看| 国产欧美精品xxxx另类| 亚洲sss综合天堂久久| 亚洲成在人线av| 国产在线精品一区免费香蕉| 成人疯狂猛交xxx| 久久久久一本一区二区青青蜜月| 久久精品国产欧美激情| 亚洲欧美日韩爽爽影院| 欧美激情一级欧美精品| 性色av香蕉一区二区| 久久久av网站| 日韩欧美高清在线视频| 色一区av在线| 国产精品嫩草影院一区二区| 欧美黄色片在线观看| 久久久久久久电影一区| 精品久久久久久中文字幕大豆网| 久久影视电视剧免费网站清宫辞电视| 日韩av在线免播放器| 欧美一区二区三区艳史| 日本久久精品视频| 57pao成人永久免费视频| 欧美国产日韩一区二区三区| 欧美黑人又粗大| 国产精品爱久久久久久久| 国产精品第8页| 色小说视频一区| 成人精品久久一区二区三区| 91精品久久久久久久久不口人| 日韩免费在线免费观看| 欧美黄网免费在线观看| 在线电影中文日韩| 国产成人高清激情视频在线观看| 日本国产一区二区三区| 在线精品91av| 亚洲人成在线观| 成人国产精品久久久| 日韩av大片在线| 久久天天躁日日躁| 久久亚洲精品小早川怜子66| 欧美日韩第一页| 91精品国产色综合久久不卡98| 欧美精品一区在线播放| 亚洲人成电影在线播放| 国产成人精品一区二区| 97视频com| 久久69精品久久久久久久电影好| 亚洲黄色www| 久久精品成人欧美大片| 欧美专区在线播放| 欧美性精品220| 欧美激情视频给我| 欧美日韩久久久久| 久久99热精品这里久久精品| 中文字幕欧美日韩精品| 亚洲最大在线视频| 成人做爽爽免费视频| 国内精品免费午夜毛片| 欧美成在线观看| 九九九久久国产免费| 亚洲v日韩v综合v精品v| 日韩av男人的天堂| 69**夜色精品国产69乱| 精品福利樱桃av导航| 久久久久久久久爱| 国产色视频一区| 日韩性xxxx爱| 欧美日韩免费在线观看| 亚洲国产精品网站| 久久国产精品久久久久久久久久| 亚洲国产成人精品久久久国产成人一区| 91手机视频在线观看| 亚洲成人教育av| 欧美精品激情在线观看| 亚洲精品视频在线观看视频| 日韩av影视综合网| 人妖精品videosex性欧美| 成人高h视频在线| 最近2019年中文视频免费在线观看| 欧美午夜久久久| 国语自产精品视频在线看一大j8| 成人性生交大片免费看小说| 欧美电影在线免费观看网站| 亚洲a区在线视频| 欧美伊久线香蕉线新在线| 亚洲综合日韩在线| 78m国产成人精品视频| www.国产精品一二区| 青青草精品毛片| 91免费看国产| 国产亚洲激情在线| 色系列之999| 国产视频自拍一区| 亚洲国产精品电影| 精品免费在线观看| 精品国产91久久久久久老师| 亚洲欧美精品一区二区| 最近日韩中文字幕中文|