遇到的问题
今天处理图片,发现引用Camera图片库里面的照片的时候,发现拍的时候是正的,系统图库也是正的,自己引用的时候,就被翻转了,很是奇怪。查阅资料发现Android的相机天生就是横向的,拍摄照片的时候会携带上翻转的信息,系统相册会做处理。
解决方案
参考:/zmc/p/4022902.html
先给出一种解决方案:
步骤一:先获取照片属性中的翻转信息
/*** 获取照片属性中的旋转角度** @param path 图片的绝对路径* @return 照片属性中的旋转角度*/@RequiresPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)public static int getOrientationRotate(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;}
步骤二:旋转一下Bitmap
/*** 根据角度值旋转Bitmap** @param bitmap* @param degree* @return*/private static Bitmap rotateBitmapByDegree(Bitmap bitmap, int degree) {// 根据旋转角度,得到旋转矩阵Matrix matrix = new Matrix();matrix.postRotate(degree);// 将原始图片按照旋转矩阵进行旋转,得到新的图片Bitmap result = null;try {result = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);} catch (OutOfMemoryError e) {e.printStackTrace();result = bitmap;}if (bitmap != result) {bitmap.recycle();}return result;}
不过这种方式总觉得不是很畅快,等待更好的解决方案吧。。。