解决部分安卓手机上拍出的照片被自动旋转的问题
2016-12-08 本文已影响1041人
Ggx的代码之旅
通常情况,调用照相机拍照之后产生的图片默认旋转角度为0,此信息可以通过读取图片的EXIF信息来获取到。对于某些手机拍照之后旋转角度被改变了,造成照片的现实也改变了我们可以通过android.graphics.Matrix将照片角度在旋转回去即可。
1. 使用ExifInterface对象获取图片的EXIF信息。
/**
* 读取图片的旋转的角度
* ExifInterface支持3中传参数的方式,
* 1.指定文件路径
* 2.通过FileDescriptor对象
* 3.从原始的输入流
* @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;
}
之后使用矩阵将图片的角度旋转回去。
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;
}