博客園第一天,發一個今天發現的問題吧。
今天在開發android的時候發現一個問題,三星和聯想手機的系統拍照功能默認橫屏拍照。拍出來的照片也是橫屏,所以在頁面上的展示也是橫屏,與實際相反。
查資料后發現這是手機廠商的問題,從代碼端無法決定橫屏拍還是豎屏拍。
最后我的解決辦法是手動判斷照片是橫向還是豎向(即照片的偏離角度),主要代碼如下:
/**
* 讀取圖片屬性:旋轉的角度
* @author GuoJing
* @param path
* 圖片絕對路徑 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;
}
然后根據偏離的角度去手動旋轉圖片然后上傳,相關代碼如下:
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(FileUtil.readPictureDegree(path));
bitmap = Bitmap.createBitmap(bitmap,0,0, bitmap.getWidth(), bitmap.getHeight(),matrix, true);
最后該問題完美解決。