This is an automated email from the ASF dual-hosted git repository.
GitToTheHub pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-camera.git
The following commit(s) were added to refs/heads/master by this push:
new 9cf4a9c refactor(ios): `resultForImage:` (#951)
9cf4a9c is described below
commit 9cf4a9c8974f34ad16434fcdf845d8e5ee9c9500
Author: Manuel Beck <[email protected]>
AuthorDate: Mon Apr 20 18:17:13 2026 +0200
refactor(ios): `resultForImage:` (#951)
* refactor(ios): small refactoring on `resultForImage:`
- Document meta data processing
- Remove any reference of `self.cdvUIImagePickerController` since it is not
needed here and also not set, when `PHPickerViewController` is used
- Use `pictureOptions.sourceType` instead of
`self.cdvUIImagePickerController.sourceType``
- Use `pictureOptions` parameter instead of
`self.cdvUIImagePickerController.pictureOptions`
* fix(ios): Improve code for meta data processing in `resultForImage:``
- Fix: Use local variable `imageDataToWrite` instead of `self.data` to
create the `CGImageSourceRef`. This code was wrong.
---
src/ios/CDVCamera.m | 65 ++++++++++++++++++++++++++++++-----------------------
1 file changed, 37 insertions(+), 28 deletions(-)
diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m
index ed90ae9..152905f 100644
--- a/src/ios/CDVCamera.m
+++ b/src/ios/CDVCamera.m
@@ -726,19 +726,18 @@ static NSString* MIME_JPEG = @"image/jpeg";
return processedImage;
}
-- (void)resultForImage:(CDVPictureOptions*)options
+- (void)resultForImage:(CDVPictureOptions*)pictureOptions
info:(NSDictionary*)info
completion:(void (^)(CDVPluginResult* res))completion
{
CDVPluginResult* result = nil;
- BOOL saveToPhotoAlbum = options.saveToPhotoAlbum;
UIImage* image = nil;
- switch (options.destinationType) {
+ switch (pictureOptions.destinationType) {
case DestinationTypeDataUrl:
{
- image = [self retrieveImage:info options:options];
- NSString* data = [self processImageAsDataUri:image info:info
options:options];
+ image = [self retrieveImage:info options:pictureOptions];
+ NSString* data = [self processImageAsDataUri:image info:info
options:pictureOptions];
if (data) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsString: data];
}
@@ -746,48 +745,57 @@ static NSString* MIME_JPEG = @"image/jpeg";
break;
default: // DestinationTypeFileUri
{
- image = [self retrieveImage:info options:options];
- NSData* data = [self processImage:image info:info options:options];
+ image = [self retrieveImage:info options:pictureOptions];
+ NSData* imageData = [self processImage:image info:info
options:pictureOptions];
- if (data) {
- if (self.cdvUIImagePickerController.sourceType ==
UIImagePickerControllerSourceTypePhotoLibrary) {
- NSMutableData *imageDataWithExif = [NSMutableData data];
+ if (imageData) {
+ if (pictureOptions.sourceType ==
UIImagePickerControllerSourceTypePhotoLibrary) {
+
+ NSData *imageDataToWrite = imageData;
+
+ // Copy custom choosen meta data stored in self.metadata
to the image
if (self.metadata) {
- CGImageSourceRef sourceImage =
CGImageSourceCreateWithData((__bridge CFDataRef)self.data, NULL);
+ NSMutableData *imageDataWithCustomMetaData =
[NSMutableData data];
+
+ // Prepare source image
+ CGImageSourceRef sourceImage =
CGImageSourceCreateWithData((__bridge CFDataRef)imageDataToWrite, NULL);
CFStringRef sourceType =
CGImageSourceGetType(sourceImage);
-
- CGImageDestinationRef destinationImage =
CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageDataWithExif,
sourceType, 1, NULL);
+
+ // Prepare dest image
+ CGImageDestinationRef destinationImage =
CGImageDestinationCreateWithData((__bridge
CFMutableDataRef)imageDataWithCustomMetaData, sourceType, 1, NULL);
+
+ // Copy source to dest with self.metadata
CGImageDestinationAddImageFromSource(destinationImage,
sourceImage, 0, (__bridge CFDictionaryRef)self.metadata);
CGImageDestinationFinalize(destinationImage);
CFRelease(sourceImage);
CFRelease(destinationImage);
- } else {
- imageDataWithExif = [self.data mutableCopy];
+
+ imageDataToWrite = imageDataWithCustomMetaData;
}
+ NSString* tempFilePath = [self
tempFilePathForExtension:pictureOptions.encodingType == EncodingTypePNG ?
@"png":@"jpg"];
NSError* err = nil;
- NSString* extension =
self.cdvUIImagePickerController.pictureOptions.encodingType == EncodingTypePNG
? @"png":@"jpg";
- NSString* filePath = [self
tempFilePathForExtension:extension];
-
- // save file
- if (![imageDataWithExif writeToFile:filePath
options:NSAtomicWrite error:&err]) {
+
+ // Write image to temp path
+ if ([imageDataToWrite writeToFile:tempFilePath
options:NSAtomicWrite error:&err]) {
+ result = [CDVPluginResult
resultWithStatus:CDVCommandStatus_OK
+ messageAsString:[[NSURL
fileURLWithPath:tempFilePath] absoluteString]];
+
+ // Write was not successful
+ } else {
result = [CDVPluginResult
resultWithStatus:CDVCommandStatus_IO_EXCEPTION
messageAsString:[err
localizedDescription]];
}
- else {
- result = [CDVPluginResult
resultWithStatus:CDVCommandStatus_OK
- messageAsString:[[NSURL
fileURLWithPath:filePath] absoluteString]];
- }
- } else if (self.cdvUIImagePickerController.sourceType !=
UIImagePickerControllerSourceTypeCamera || !options.usesGeolocation) {
+ } else if (pictureOptions.sourceType !=
UIImagePickerControllerSourceTypeCamera || !pictureOptions.usesGeolocation) {
// No need to save file if usesGeolocation is true since
it will be saved after the location is tracked
- NSString* extension = options.encodingType ==
EncodingTypePNG? @"png" : @"jpg";
+ NSString* extension = pictureOptions.encodingType ==
EncodingTypePNG? @"png" : @"jpg";
NSString* filePath = [self
tempFilePathForExtension:extension];
NSError* err = nil;
// save file
- if (![data writeToFile:filePath options:NSAtomicWrite
error:&err]) {
+ if (![imageData writeToFile:filePath options:NSAtomicWrite
error:&err]) {
result = [CDVPluginResult
resultWithStatus:CDVCommandStatus_IO_EXCEPTION
messageAsString:[err
localizedDescription]];
} else {
@@ -801,7 +809,8 @@ static NSString* MIME_JPEG = @"image/jpeg";
break;
};
- if (saveToPhotoAlbum && image) {
+ // Save the image to the photo album after capture
+ if (pictureOptions.saveToPhotoAlbum && image) {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]