Android手機拍照後照片被旋轉或者需要旋轉的問題
阿新 • • 發佈:2019-01-23
1、讀取圖片的旋轉屬性
/**
*
讀取圖片的旋轉的角度
*
*
@param path
*
圖片絕對路徑
*
@return 圖片的旋轉角度
*/
private 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;
}
|
/** * 將圖片按照某個角度進行旋轉 * * @param bm * 需要旋轉的圖片 * @param degree * 旋轉角度 * @return 旋轉後的圖片 */ public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) { Bitmap returnBm = null; // 根據旋轉角度,生成旋轉矩陣 Matrix matrix = new Matrix(); matrix.postRotate(degree); try { // 將原始圖片按照旋轉矩陣進行旋轉,並得到新的圖片 returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); } catch (OutOfMemoryError e) { } if (returnBm == null) { returnBm = bm; } if (bm != returnBm) { bm.recycle(); } return returnBm; }
在部分Android手機(如MT788、Note2)上,使用Camera拍照以後,得到的照片會被自動旋轉(90°、180°、270°),這個情況很不符合預期。仔細分析了一下,因為照片屬性中是儲存了旋轉資訊的,所以要解決這個問題,可以在onActivityResult方法中,獲取到照片資料後,讀取它的旋轉資訊,如果不是0,說明這個照片已經被旋轉過了,那麼再使用android.graphics.Matrix將照片旋轉回去即可。
我的程式碼中使用了這個方法:
但是最後還是沒有使用,放棄了, 決定還是搞個預覽功能,並且支援旋轉,由使用者自己來決定到底是選擇
豎著的還是橫著的
文章未完,敬請期待
|