diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt index c77f2f80..2bee99c7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt @@ -18,7 +18,8 @@ import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.OutputStream -class PhotoProcessor(val activity: MainActivity, val saveUri: Uri?, val deviceOrientation: Int, val previewRotation: Int, val isUsingFrontCamera: Boolean) : +class PhotoProcessor(val activity: MainActivity, val saveUri: Uri?, val deviceOrientation: Int, val previewRotation: Int, val isUsingFrontCamera: Boolean, + val isThirdPartyIntent: Boolean) : AsyncTask() { override fun doInBackground(vararg params: ByteArray): String { @@ -67,14 +68,21 @@ class PhotoProcessor(val activity: MainActivity, val saveUri: Uri?, val deviceOr } } - val exif = ExifInterface(photoFile.toString()) - val orient = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED) + val exif = try { + ExifInterface(path) + } catch (e: Exception) { + null + } + + val orient = exif?.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED) + ?: ExifInterface.ORIENTATION_UNDEFINED + val imageRot = orient.degreesFromOrientation() val deviceRot = compensateDeviceRotation(deviceOrientation, isUsingFrontCamera) var image = BitmapFactory.decodeByteArray(data, 0, data.size) val totalRotation = (imageRot + deviceRot + previewRotation) % 360 - if (path.startsWith(activity.internalStoragePath) || isNougatPlus()) { + if (path.startsWith(activity.internalStoragePath) || isNougatPlus() && !isThirdPartyIntent) { // do not rotate the image itself in these cases, rotate it by exif only } else { // make sure the image itself is rotated at third party intents @@ -98,13 +106,15 @@ class PhotoProcessor(val activity: MainActivity, val saveUri: Uri?, val deviceOr try { image.compress(Bitmap.CompressFormat.JPEG, activity.config.photoQuality, fos) - activity.saveImageRotation(path, totalRotation) + if (!isThirdPartyIntent) { + activity.saveImageRotation(path, totalRotation) + } } catch (e: Exception) { activity.showErrorToast(e) return "" } - if (activity.config.savePhotoMetadata) { + if (activity.config.savePhotoMetadata && !isThirdPartyIntent) { val fileExif = ExifInterface(path) tempExif.copyTo(fileExif) } diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt index a47de55a..bbed22f4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt @@ -383,7 +383,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview { private fun storePhoto(data: ByteArray) { val previewRotation = getPreviewRotation(mCurrCameraId) - PhotoProcessor(mActivity!!, mTargetUri, mRotationAtCapture, previewRotation, getIsUsingFrontCamera()).execute(data) + PhotoProcessor(mActivity!!, mTargetUri, mRotationAtCapture, previewRotation, getIsUsingFrontCamera(), mIsImageCaptureIntent).execute(data) } private fun getIsUsingFrontCamera() = mCurrCameraId == mActivity!!.getMyCamera().getFrontCameraId() diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt index 8a6f6a92..0968aa2f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt @@ -275,7 +275,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie val buffer = reader.acquireNextImage().planes.first().buffer val bytes = ByteArray(buffer.remaining()) buffer.get(bytes) - PhotoProcessor(mActivity, mTargetUri, mRotationAtCapture, mSensorOrientation, mUseFrontCamera).execute(bytes) + PhotoProcessor(mActivity, mTargetUri, mRotationAtCapture, mSensorOrientation, mUseFrontCamera, mIsImageCaptureIntent).execute(bytes) } catch (e: Exception) { } }