问题描述
在做项目适配的时候发现,我从相册选取图片进行的时候,发现三星手机的照片是默认旋转90度的,这样导致自己通过该照片做一定处理后,出来的结果是横屏的,所以需要自己去做相关旋转偏移
关于ExifInterface获取
目前AndroidQ是拿不到path路径的,故之前的那种拿取exifInterface的方式已经不可取了,虽然Android11又可以开放了,但是还是要做相应的适配
try {
ExifInterface exifInterface = new ExifInterface(filePath);
int orientation = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL
);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
return 90;
case ExifInterface.ORIENTATION_ROTATE_180:
return 180;
case ExifInterface.ORIENTATION_ROTATE_270:
return 270;
default:
return 0;
}
} catch (IOException e) {
e.printStackTrace();
return -1;
}
- 由于这里exifInterface需要传入图片的路径
- 考虑过获取当前的保存的图片路径和已经原来的图片路径,然后进行但是对于绝对路径目前AndroidQ是拿不到的,然后本地保存的图片路径由于使用BitmapCmpress都压缩过了,导致exifInterface的信息丢失了,所以有了以下方法进行解决
解决方法
可以通过MediaStore.Images.ImageColumns.ORIENTATION这个属性获取图片的方向
private fun getOrientation(context: Context, uri: Uri): Int {
val cursor: Cursor? = context.contentResolver.query(
uri,
arrayOf(MediaStore.Images.ImageColumns.ORIENTATION),
null, null, null
)
var result = -1
if (null != cursor) {
if (cursor.moveToFirst()) {
result = cursor.getInt(0)
}
cursor.close()
}
return result
}
这样通过拿取图片的uri去获取了该图片的ORIENTATION方向属性,如此就拿到了图片实际的方向