前言
常见通过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;
}
}
复制代码