国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

解決android有的手機拍照后上傳圖片被旋轉的問題

2019-12-12 05:11:14
字體:
來源:轉載
供稿:網友

需求:做仿新浪發微博的項目,能夠上傳圖片還有兩外一個項目用到手機拍攝圖片,這兩個都需要把圖片上傳到服務器
遇到問題:有的手機拍攝的圖片旋轉90度,有的圖片旋轉了180度,有的手機是正常的,服務器要求的是正的,這樣問題就來了,不能用戶發個照片在微博上看到的是被旋轉了的啊,另外一個項目里旋轉了的圖片直接匹配出現問題,這個更嚴重。

解決:開始的時候在網上沒有找到很好的解決辦法,谷歌百度的搜了一通,想到第一種解決方式,當手機拍照結束,在返回結果處理里面立即跳轉到一個新的頁面,在新的頁面里讓用戶自己手動去旋轉圖片,然后點擊確定。就可以上傳到服務器正著的圖片了;第二種解決方式,這是在論壇里發現的一個方法,可以獲取圖片的屬性,讀取圖片的旋轉角度。

第一種方式代碼:

在onActivityResult里面處理跳轉

<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里面就可以作相應的旋轉處理了

<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();          // 創建操作圖片用的matrix對象     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) {     //旋轉圖片 動作     matrix.postRotate(angle2);     System.out.println("angle2=" + angle2);     // 創建新的圖片     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,         myWidth, myHeight, matrix, true);     Drawable drawable = ImageDispose.bitmapToDrawable(resizedBitmap);     imageView.setBackgroundDrawable(drawable);        return resizedBitmap;   }</span> 

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

在onActivityResult里面處理

BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmapOptions.inSampleSize = 8; File file = new File(SD_CARD_TEMP_DIR); /**  * 獲取圖片的旋轉角度,有些系統把拍照的圖片旋轉了,有的沒有旋轉  */ int degree = ImageDispose.readPictureDegree(file.getAbsolutePath()); 
<span style="font-size:18px;">Bitmap cameraBitmap = BitmapFactory.decodeFile(SD_CARD_TEMP_DIR, bitmapOptions); bitmap = cameraBitmap; /**  * 把圖片旋轉為正的方向  */ bitmap = ImageDispose.rotaingImageView(degree, bitmap); upload(bitmap);</span> 
<span style="font-size:18px;"> /**    * 旋轉圖片    * @param angle    * @param bitmap    * @return Bitmap    */   public static Bitmap rotaingImageView(int angle , Bitmap bitmap) {     //旋轉圖片 動作     Matrix matrix = new Matrix();;     matrix.postRotate(angle);     System.out.println("angle2=" + angle);     // 創建新的圖片     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,         bitmap.getWidth(), bitmap.getHeight(), matrix, true);     return resizedBitmap;   }</span> 
/**  * 讀取圖片屬性:旋轉的角度  * @param path 圖片絕對路徑  * @return degree旋轉的角度  */   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;   }  

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

第一種方式的圖片

以上就是對解決android有的手機拍照后上傳圖片被旋轉的問題,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹市| 鹤壁市| 舞阳县| 信阳市| 阆中市| 南昌县| 余干县| 娄底市| 密云县| 阿拉善右旗| 天峨县| 平塘县| 北宁市| 灯塔市| 宜都市| 元谋县| 老河口市| 长岛县| 廉江市| 满城县| 阿城市| 黄平县| 永修县| 宜州市| 宜都市| 无极县| 新郑市| 托里县| 江口县| 禄丰县| 和平县| 江安县| 象州县| 寿光市| 友谊县| 眉山市| 盐津县| 隆回县| 莱州市| 扎赉特旗| 通山县|