获得拍照照片后,查看旋转角度,如果有旋转角度,说明被旋转了,再使用旋转矩阵旋转回来即可。
调用方:
int degree = BitmapUtils.getBitmapDegree(file.getAbsolutePath()); BitmapUtils.compressBitmapForUploadLimitMaxSize(this, file, MAX_UPLOAD_SIZE); BitmapUtils.rotateBitmapByDegree(file, degree);
public static 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 void rotateBitmapByDegree(File file, int degree) { if (file == null || !file.exists() || degree == 0) { return; } Bitmap bitmap = null, rotatedBitmap = null; try { bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); if (bitmap == null) { return; } // 根据旋转角度,生成旋转矩阵 Matrix matrix = new Matrix(); matrix.postRotate(degree); // 将原始图片按照旋转矩阵进行旋转,并得到新的图片 rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); saveBitmap2file(rotatedBitmap, file); } catch (OutOfMemoryError e) { L.exception(e); } finally { if (bitmap != null) { bitmap.recycle(); } if (rotatedBitmap != null) { rotatedBitmap.recycle(); } System.gc(); } }
时间: 2024-10-29 23:53:11