Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

[camera] Add implementation of didFinishProcessingPhoto callback (iOS) #3337

Merged
merged 2 commits into from
Dec 19, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/camera/camera/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.6.0+2

* Added implementation of the `didFinishProcessingPhoto` on iOS which allows saving image metadata (EXIF) on iOS 11 and up.

## 0.6.0+1

Updated README to inform users that iOS 10.0+ is needed for use
Expand Down
20 changes: 20 additions & 0 deletions packages/camera/camera/ios/Classes/CameraPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ - (void)captureOutput:(AVCapturePhotoOutput *)output
UIImage *image = [UIImage imageWithCGImage:[UIImage imageWithData:data].CGImage
scale:1.0
orientation:[self getImageRotation]];

// TODO(sigurdm): Consider writing file asynchronously.
bool success = [UIImageJPEGRepresentation(image, 1.0) writeToFile:_path atomically:YES];
if (!success) {
Expand All @@ -85,6 +86,25 @@ - (void)captureOutput:(AVCapturePhotoOutput *)output
_result(_path);
}

- (void)captureOutput:(AVCapturePhotoOutput *)output
didFinishProcessingPhoto:(AVCapturePhoto *)photo
error:(NSError *)error API_AVAILABLE(ios(11.0)) {
selfReference = nil;
if (error) {
_result(getFlutterError(error));
return;
}

NSData *photoData = [photo fileDataRepresentation];

bool success = [photoData writeToFile:_path atomically:YES];
if (!success) {
_result([FlutterError errorWithCode:@"IOError" message:@"Unable to write file" details:nil]);
return;
}
_result(_path);
}

- (UIImageOrientation)getImageRotation {
float const threshold = 45.0;
BOOL (^isNearValue)(float value1, float value2) = ^BOOL(float value1, float value2) {
Expand Down
2 changes: 1 addition & 1 deletion packages/camera/camera/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: camera
description: A Flutter plugin for getting information about and controlling the
camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video,
and streaming image buffers to dart.
version: 0.6.0+1
version: 0.6.0+2
homepage: https://github.com/flutter/plugins/tree/master/packages/camera/camera

dependencies:
Expand Down