三星手機拍照旋轉問題
阿新 • • 發佈:2017-07-20
efi path .post 讀取 pre error final break void
獲得拍照照片後,查看旋轉角度,如果有旋轉角度,說明被旋轉了,再使用旋轉矩陣旋轉回來即可。
調用方:
int degree = BitmapUtils.getBitmapDegree(file.getAbsolutePath()); BitmapUtils.compressBitmapForUploadLimitMaxSize(this, file, MAX_UPLOAD_SIZE); BitmapUtils.rotateBitmapByDegree(file, degree);
public static int getBitmapDegree(String path) {int degree = 0; try { // 從指定路徑下讀取圖片,並獲取其EXIF信息 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; } public static void rotateBitmapByDegree(File file, int degree) { if (file == null || !file.exists() || degree == 0) { return; } Bitmap bitmap = null, rotatedBitmap = null; try { bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); if (bitmap == null) { return; } // 根據旋轉角度,生成旋轉矩陣 Matrix matrix = new Matrix(); matrix.postRotate(degree); // 將原始圖片按照旋轉矩陣進行旋轉,並得到新的圖片 rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); saveBitmap2file(rotatedBitmap, file); } catch (OutOfMemoryError e) { L.exception(e); } finally { if (bitmap != null) { bitmap.recycle(); } if (rotatedBitmap != null) { rotatedBitmap.recycle(); } System.gc(); } }
三星手機拍照旋轉問題