diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java index 5169a3babb74..711f040acce3 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -28,6 +28,7 @@ import android.hardware.camera2.params.OutputConfiguration; import android.hardware.camera2.params.SessionConfiguration; import android.media.CamcorderProfile; +import android.media.ExifInterface; import android.media.Image; import android.media.ImageReader; import android.media.MediaRecorder; @@ -423,6 +424,7 @@ public void takePicture(@NonNull final Result result) { try (Image image = reader.acquireLatestImage()) { ByteBuffer buffer = image.getPlanes()[0].getBuffer(); writeToFile(buffer, file); + if(isFrontFacing) updateExifMetadata(file.getAbsolutePath()); pictureCaptureRequest.finish(file.getAbsolutePath()); } catch (IOException e) { pictureCaptureRequest.error("IOError", "Failed saving image", null); @@ -437,6 +439,13 @@ public void takePicture(@NonNull final Result result) { } } + void updateExifMetadata(String filePath) throws IOException { + ExifInterface exif = new ExifInterface(filePath); + exif.setAttribute( + ExifInterface.TAG_ORIENTATION, String.valueOf(ExifInterface.ORIENTATION_TRANSVERSE)); + exif.saveAttributes(); + } + private final CameraCaptureSession.CaptureCallback pictureCaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override diff --git a/packages/camera/camera/ios/Classes/CameraPlugin.m b/packages/camera/camera/ios/Classes/CameraPlugin.m index c1770ff6d40b..882a27dd65f4 100644 --- a/packages/camera/camera/ios/Classes/CameraPlugin.m +++ b/packages/camera/camera/ios/Classes/CameraPlugin.m @@ -448,6 +448,9 @@ - (void)captureToFile:(FlutterResult)result API_AVAILABLE(ios(10)) { [self getVideoOrientationForDeviceOrientation:[[UIDevice currentDevice] orientation]]; } } + if([_captureDevice position] == AVCaptureDevicePositionFront && connection.supportsVideoMirroring) { + connection.videoMirrored = YES; + } [_capturePhotoOutput capturePhotoWithSettings:settings delegate:[[FLTSavePhotoDelegate alloc] initWithPath:path