From 214b74486b96bf2fd00e2f50facb2f63b5c45a5b Mon Sep 17 00:00:00 2001 From: jcesarmobile Date: Thu, 12 Aug 2021 12:09:06 +0200 Subject: [PATCH] fix(android): Properly reset orientation exif if corrected (#4912) --- .../src/main/java/com/getcapacitor/plugin/Camera.java | 11 +++++------ .../com/getcapacitor/plugin/camera/ExifWrapper.java | 4 ++++ .../com/getcapacitor/plugin/camera/ImageUtils.java | 5 ++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/android/capacitor/src/main/java/com/getcapacitor/plugin/Camera.java b/android/capacitor/src/main/java/com/getcapacitor/plugin/Camera.java index 4bc62e9800..ccaea00f01 100644 --- a/android/capacitor/src/main/java/com/getcapacitor/plugin/Camera.java +++ b/android/capacitor/src/main/java/com/getcapacitor/plugin/Camera.java @@ -320,15 +320,13 @@ private Uri saveTemporaryImage(Bitmap bitmap, Uri contentUri, InputStream is) th * @param u */ private void returnResult(PluginCall call, Bitmap bitmap, Uri u) { + ExifWrapper exif = ImageUtils.getExifData(getContext(), bitmap, u); try { - bitmap = prepareBitmap(bitmap, u); + bitmap = prepareBitmap(bitmap, u, exif); } catch (IOException e) { call.reject(UNABLE_TO_PROCESS_IMAGE); return; } - - ExifWrapper exif = ImageUtils.getExifData(getContext(), bitmap, u); - // Compress the final image and prepare for output to client ByteArrayOutputStream bitmapOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, settings.getQuality(), bitmapOutputStream); @@ -404,11 +402,12 @@ private Uri getTempImage(Bitmap bitmap, Uri u, ByteArrayOutputStream bitmapOutpu * recycling the old one in the process * @param bitmap * @param imageUri + * @param exif * @return */ - private Bitmap prepareBitmap(Bitmap bitmap, Uri imageUri) throws IOException { + private Bitmap prepareBitmap(Bitmap bitmap, Uri imageUri, ExifWrapper exif) throws IOException { if (settings.isShouldCorrectOrientation()) { - final Bitmap newBitmap = ImageUtils.correctOrientation(getContext(), bitmap, imageUri); + final Bitmap newBitmap = ImageUtils.correctOrientation(getContext(), bitmap, imageUri, exif); bitmap = replaceBitmap(bitmap, newBitmap); } diff --git a/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ExifWrapper.java b/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ExifWrapper.java index 01c9f6a0c0..ec4d462c9a 100644 --- a/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ExifWrapper.java +++ b/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ExifWrapper.java @@ -198,4 +198,8 @@ public void copyExif(String destFile) { destExif.saveAttributes(); } catch (Exception ex) {} } + + public void resetOrientation() { + exif.resetOrientation(); + } } diff --git a/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ImageUtils.java b/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ImageUtils.java index 4e282d8478..fcd9cad312 100644 --- a/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ImageUtils.java +++ b/android/capacitor/src/main/java/com/getcapacitor/plugin/camera/ImageUtils.java @@ -106,9 +106,10 @@ private static Bitmap transform(final Bitmap bitmap, final Matrix matrix) { * the appropriate amount for portrait mode * @param bitmap * @param imageUri + * @param exif * @return */ - public static Bitmap correctOrientation(final Context c, final Bitmap bitmap, final Uri imageUri) throws IOException { + public static Bitmap correctOrientation(final Context c, final Bitmap bitmap, final Uri imageUri, ExifWrapper exif) throws IOException { if(Build.VERSION.SDK_INT < 24) { return correctOrientationOlder(c, bitmap, imageUri); } else { @@ -117,9 +118,7 @@ public static Bitmap correctOrientation(final Context c, final Bitmap bitmap, fi if (orientation != 0) { Matrix matrix = new Matrix(); matrix.postRotate(orientation); - ExifInterface exif = new ExifInterface(imageUri.getPath()); exif.resetOrientation(); - exif.saveAttributes(); return transform(bitmap, matrix); } else { return bitmap;