解決android有的手機拍照後上傳圖片被旋轉的問題
需求:做仿新浪發微博的專案,能夠上傳圖片還有兩外一個專案用到手機拍攝圖片,這兩個都需要把圖片上傳到伺服器
遇到問題:有的手機拍攝的圖片旋轉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;
- }
這樣就搞定了,此時你上傳的照片就是正的了。
第一種方式的圖片
相關文章
- ios手機豎屏拍照圖片旋轉90°問題解決方法iOS
- iOS下html上傳圖片被旋轉問題iOSHTML
- 移動端圖片上傳旋轉、壓縮的解決方案
- Android本地圖片上傳(拍照+相簿)Android地圖
- H5 和小程式拍照圖片旋轉、壓縮和上傳H5
- 用exfe.js和canvas解決移動端 IOS 拍照上傳圖片翻轉問題JSCanvasiOS
- PbootCMS上傳圖片被壓縮怎麼解決boot
- android選擇圖片或拍照圖片上傳到伺服器(包括上傳引數)Android伺服器
- 在手機端使用拍照功能上傳圖片的功能的解決文案
- Android上傳圖片之呼叫系統拍照和從相簿選擇圖片Android
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- [文件教程]解決sae下編輯器圖片上傳問題
- 圖片操作系列 —(2)手勢旋轉圖片
- wangEditor上傳圖片問題
- html5手機上傳圖片HTML
- 關於android中呼叫系統拍照,返回圖片是旋轉90度..Android
- iOS圖片,視訊上傳&視訊內容旋轉iOS
- 直播平臺搭建,Android手機拍照和手機相簿選取圖片的工具Android
- 解決WordPress文章上傳圖片使用中文名不顯示的問題
- 跨域CORS圖片上傳問題跨域CORS
- laravel上傳圖片路徑問題Laravel
- JavaScript實現手機拍攝圖片的旋轉、壓縮JavaScript
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 前端手勢控制圖片外掛書寫四(圖片上傳及Ios圖片方向問題)前端iOS
- KindEditor編輯器的圖片上傳問題
- 有關laravel 上傳圖片訪問404的問題Laravel
- [文件教程]解決sae下文件縮圖上傳問題及外掛上傳問題
- 微信小程式開發之從相簿獲取圖片 使用相機拍照 本地圖片上傳微信小程式地圖
- 獲取本地圖片或拍照,進行頭像圖片的上傳的工具類地圖
- Android壓縮圖片後再上傳圖片Android
- php圖片上傳之圖片轉換PHP
- 手機直播原始碼,前端圖片壓縮上傳需顧及清晰度問題原始碼前端
- Android圖片解析度dpi的相關問題解決Android
- 解決jenkins 傳送郵件圖片亂碼問題Jenkins
- 解決Hexo關於圖片的問題Hexo
- 短視訊系統,解決圖片上傳時底部或頂部留白的問題
- 怎麼旋轉圖片?BenVista PhotoZoom Pro旋轉圖片的方法OOM
- Android之批量載入圖片OOM問題解決方案AndroidOOM