亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決android有的手機(jī)拍照后上傳圖片被旋轉(zhuǎn)的問題

 更新時(shí)間:2016年09月22日 17:22:52   作者:木頭人__walker  
這篇文章主要介紹了解決android有的手機(jī)拍照后上傳圖片被旋轉(zhuǎn)的問題的相關(guān)資料,需要的朋友可以參考下

需求:做仿新浪發(fā)微博的項(xiàng)目,能夠上傳圖片還有兩外一個(gè)項(xiàng)目用到手機(jī)拍攝圖片,這兩個(gè)都需要把圖片上傳到服務(wù)器
遇到問題:有的手機(jī)拍攝的圖片旋轉(zhuǎn)90度,有的圖片旋轉(zhuǎn)了180度,有的手機(jī)是正常的,服務(wù)器要求的是正的,這樣問題就來(lái)了,不能用戶發(fā)個(gè)照片在微博上看到的是被旋轉(zhuǎn)了的啊,另外一個(gè)項(xiàng)目里旋轉(zhuǎn)了的圖片直接匹配出現(xiàn)問題,這個(gè)更嚴(yán)重。

解決:開始的時(shí)候在網(wǎng)上沒有找到很好的解決辦法,谷歌百度的搜了一通,想到第一種解決方式,當(dāng)手機(jī)拍照結(jié)束,在返回結(jié)果處理里面立即跳轉(zhuǎn)到一個(gè)新的頁(yè)面,在新的頁(yè)面里讓用戶自己手動(dòng)去旋轉(zhuǎn)圖片,然后點(diǎn)擊確定。就可以上傳到服務(wù)器正著的圖片了;第二種解決方式,這是在論壇里發(fā)現(xiàn)的一個(gè)方法,可以獲取圖片的屬性,讀取圖片的旋轉(zhuǎn)角度。

第一種方式代碼:

在onActivityResult里面處理跳轉(zhuǎn)

<span style="font-size:18px;">   Intent intent = new Intent(SendMicoBlog.this, RotaingActivity.class); 
    MyApp myApp = (MyApp)getApplication(); 
    myApp.setName(bitmap);//修改之后的名稱 
    myApp.setPhoto(isPhoto); 
    startActivityForResult(intent, 1);</span> 

在RotaingActivity里面就可以作相應(yīng)的旋轉(zhuǎn)處理了

<span style="font-size:18px;">   //獲取bitmap 
    MyApp myApp = (MyApp)getApplication(); 
    bitmap = myApp.getName(); 
    System.out.println("RotaingActivity w = " + bitmap.getWidth() + "H = " + bitmap.getHeight()); 
    myBitmap = bitmap; 
    myWidth = bitmap.getWidth(); 
    myHeight = bitmap.getHeight(); 
     
    // 創(chuàng)建操作圖片用的matrix對(duì)象 
    matrix = new Matrix(); 
    Drawable drawable = ImageDispose.bitmapToDrawable(bitmap); 
    imageView.setBackgroundDrawable(drawable); 
     
     
    btnCancel.setOnClickListener(new OnClickListener() { 
       
      @Override 
      public void onClick(View v) { 
         
        RotaingActivity.this.finish(); 
      } 
    }); 
     
    btnRightRotaing.setOnClickListener(new OnClickListener() { 
       
      @Override 
      public void onClick(View v) { 
        myBitmap = rotaingImageView(-90); 
      } 
    }); 
     
    btnLeftRotaing.setOnClickListener(new OnClickListener() { 
       
      @Override 
      public void onClick(View v) { 
        myBitmap = rotaingImageView(+90); 
      } 
    }); 
     
    btnOK.setOnClickListener(new OnClickListener() { 
       
      @Override 
      public void onClick(View v) { 
        MyApp myApp = (MyApp)getApplication(); 
        myApp.setName(myBitmap);//修改之后 
        System.out.println("OK resultcoder"); 
        Intent intent = new Intent(RotaingActivity.this, SendMicoBlog.class); 
        setResult(6, intent); 
        RotaingActivity.this.finish(); 
      } 
    }); 
  } 
  private Bitmap rotaingImageView(int angle2) { 
    //旋轉(zhuǎn)圖片 動(dòng)作 
    matrix.postRotate(angle2); 
    System.out.println("angle2=" + angle2); 
    // 創(chuàng)建新的圖片 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
        myWidth, myHeight, matrix, true); 
    Drawable drawable = ImageDispose.bitmapToDrawable(resizedBitmap); 
    imageView.setBackgroundDrawable(drawable);    
    return resizedBitmap; 
  }</span> 

第二種方式:就簡(jiǎn)單多了,直接自己出偷著把照片給處理了,不需要用戶的操作,這樣體驗(yàn)會(huì)更好一點(diǎn)。

在onActivityResult里面處理

BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
bitmapOptions.inSampleSize = 8; 
File file = new File(SD_CARD_TEMP_DIR); 
/** 
 * 獲取圖片的旋轉(zhuǎn)角度,有些系統(tǒng)把拍照的圖片旋轉(zhuǎn)了,有的沒有旋轉(zhuǎn) 
 */ 
int degree = ImageDispose.readPictureDegree(file.getAbsolutePath()); 
<span style="font-size:18px;">Bitmap cameraBitmap = BitmapFactory.decodeFile(SD_CARD_TEMP_DIR, bitmapOptions); 
bitmap = cameraBitmap; 
/** 
 * 把圖片旋轉(zhuǎn)為正的方向 
 */ 
bitmap = ImageDispose.rotaingImageView(degree, bitmap); 
upload(bitmap);</span> 

<span style="font-size:18px;"> /** 
   * 旋轉(zhuǎn)圖片 
   * @param angle 
   * @param bitmap 
   * @return Bitmap 
   */ 
  public static Bitmap rotaingImageView(int angle , Bitmap bitmap) { 
    //旋轉(zhuǎn)圖片 動(dòng)作 
    Matrix matrix = new Matrix();; 
    matrix.postRotate(angle); 
    System.out.println("angle2=" + angle); 
    // 創(chuàng)建新的圖片 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
        bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
    return resizedBitmap; 
  }</span> 

/** 
 * 讀取圖片屬性:旋轉(zhuǎn)的角度 
 * @param path 圖片絕對(duì)路徑 
 * @return degree旋轉(zhuǎn)的角度 
 */ 
  public 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; 
  } 

 

這樣就搞定了,此時(shí)你上傳的照片就是正的了。

第一種方式的圖片

以上就是對(duì)解決android有的手機(jī)拍照后上傳圖片被旋轉(zhuǎn)的問題,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論