前言
常見通過BitmapFactory獲取圖片的寬高度的程式碼如下:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile("{IMAGE_PATH}", options);
int width = options.outWidth;
int height = options.outHeight;
複製程式碼
使用上述程式碼,在圖片未旋轉的情況下得到的結果是正確的。但是如果圖片需要旋轉90度或者270度才能正確顯示時,上述程式碼獲取的寬度則是相反的(及獲取到的寬度實際上為圖片的高度,高度亦然)。
所以,我們需要通過判斷圖片顯示需要旋轉的度數來確定圖片真實的寬高。
在Android中可以通過ExifInterface
來獲取圖片的旋轉方向。具體程式碼如下:
try
{
ExifInterface exifInterface = new ExifInterface({IMAGE_PATH});
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); return orientation;
}
catch (IOException e)
{
e.printStackTrace();
return ExifInterface.ORIENTATION_NORMAL;
}
複製程式碼
獲取到方向之後,就可以通過方向的值來獲取正確的圖片寬高。完整程式碼如下:
public static Size getImageSize(String imageLocalPath)
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile("{IMAGE_PATH}", options);
int width = options.outWidth;
int height = options.outHeight;
int orientation = getImageOrientation(imageLocalPath);
switch(orientation)
{
case ExifInterface.ORIENTATION_ROTATE_90:
case ExifInterface.ORIENTATION_ROTATE_270:
{
return new Size(height, width);
}
default:
{
return new Size(width, height);
}
}
}
public static int getImageOrientation(String imageLocalPath)
{
try
{
ExifInterface exifInterface = new ExifInterface({IMAGE_PATH});
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); return orientation;
` }
catch (IOException e)
{
e.printStackTrace();
return ExifInterface.ORIENTATION_NORMAL;
}
}
複製程式碼