Skip to content

Commit

Permalink
Refactor rotateImage() to improve EXIF orientation handling and reada…
Browse files Browse the repository at this point in the history
…bility.

Signed-off-by: Onkar Chavan <[email protected]>
  • Loading branch information
Onkar755 authored and alperozturk96 committed Nov 7, 2024
1 parent a9d9fbf commit dc65407
Showing 1 changed file with 46 additions and 38 deletions.
84 changes: 46 additions & 38 deletions app/src/main/java/com/owncloud/android/utils/BitmapUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,45 +181,53 @@ public static Bitmap rotateImage(Bitmap bitmap, String storagePath) {
ExifInterface exifInterface = new ExifInterface(storagePath);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);

Matrix matrix = new Matrix();

// 1: nothing to do

// 2
if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL) {
matrix.postScale(-1.0f, 1.0f);
}
// 3
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
matrix.postRotate(180);
}
// 4
else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL) {
matrix.postScale(1.0f, -1.0f);
}
// 5
else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE) {
matrix.postRotate(-90);
matrix.postScale(1.0f, -1.0f);
}
// 6
else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
matrix.postRotate(90);
}
// 7
else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE) {
matrix.postRotate(90);
matrix.postScale(1.0f, -1.0f);
}
// 8
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
matrix.postRotate(270);
}
if (orientation != ExifInterface.ORIENTATION_NORMAL) {
Matrix matrix = new Matrix();
switch (orientation) {
// 2
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: {
matrix.postScale(-1.0f, 1.0f);
break;
}
// 3
case ExifInterface.ORIENTATION_ROTATE_180: {
matrix.postRotate(180);
break;
}
// 4
case ExifInterface.ORIENTATION_FLIP_VERTICAL: {
matrix.postScale(1.0f, -1.0f);
break;
}
// 5
case ExifInterface.ORIENTATION_TRANSPOSE: {
matrix.postRotate(-90);
matrix.postScale(1.0f, -1.0f);
break;
}
// 6
case ExifInterface.ORIENTATION_ROTATE_90: {
matrix.postRotate(90);
break;
}
// 7
case ExifInterface.ORIENTATION_TRANSVERSE: {
matrix.postRotate(90);
matrix.postScale(1.0f, -1.0f);
break;
}
// 8
case ExifInterface.ORIENTATION_ROTATE_270: {
matrix.postRotate(270);
break;
}
}

// Rotate the bitmap
resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (!resultBitmap.equals(bitmap)) {
bitmap.recycle();
// Rotate the bitmap
resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
if (!resultBitmap.equals(bitmap)) {
bitmap.recycle();
}
}
} catch (Exception exception) {
Log_OC.e("BitmapUtil", "Could not rotate the image: " + storagePath);
Expand Down

0 comments on commit dc65407

Please sign in to comment.