From ad8c325af0a2459f5a7788be08a8da4118717671 Mon Sep 17 00:00:00 2001 From: jcesarmobile Date: Thu, 12 Aug 2021 12:33:45 +0200 Subject: [PATCH] fix(camera): Properly reset orientation exif if corrected (#545) --- .../com/capacitorjs/plugins/camera/CameraPlugin.java | 11 +++++------ .../com/capacitorjs/plugins/camera/ExifWrapper.java | 4 ++++ .../com/capacitorjs/plugins/camera/ImageUtils.java | 5 ++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/camera/android/src/main/java/com/capacitorjs/plugins/camera/CameraPlugin.java b/camera/android/src/main/java/com/capacitorjs/plugins/camera/CameraPlugin.java index 654c49cde..f2127b304 100644 --- a/camera/android/src/main/java/com/capacitorjs/plugins/camera/CameraPlugin.java +++ b/camera/android/src/main/java/com/capacitorjs/plugins/camera/CameraPlugin.java @@ -347,15 +347,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); @@ -430,11 +428,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/camera/android/src/main/java/com/capacitorjs/plugins/camera/ExifWrapper.java b/camera/android/src/main/java/com/capacitorjs/plugins/camera/ExifWrapper.java index a2b2dd6ef..8cf1c250f 100644 --- a/camera/android/src/main/java/com/capacitorjs/plugins/camera/ExifWrapper.java +++ b/camera/android/src/main/java/com/capacitorjs/plugins/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/camera/android/src/main/java/com/capacitorjs/plugins/camera/ImageUtils.java b/camera/android/src/main/java/com/capacitorjs/plugins/camera/ImageUtils.java index cd7e5981e..87e9fe14b 100644 --- a/camera/android/src/main/java/com/capacitorjs/plugins/camera/ImageUtils.java +++ b/camera/android/src/main/java/com/capacitorjs/plugins/camera/ImageUtils.java @@ -67,9 +67,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 { @@ -78,9 +79,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;