This is an automated email from the ASF dual-hosted git repository.

manuelbeck pushed a commit to branch pr-resultforimage-small-refactoring
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-camera.git

commit 64b28461c64dfd1c9450d2f8bb477832bb4f3ac4
Author: Manuel Beck <[email protected]>
AuthorDate: Tue Feb 3 12:36:34 2026 +0100

    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`
---
 src/ios/CDVCamera.m | 61 ++++++++++++++++++++++++++++++-----------------------
 1 file changed, 35 insertions(+), 26 deletions(-)

diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m
index 0cdf306..b46303e 100644
--- a/src/ios/CDVCamera.m
+++ b/src/ios/CDVCamera.m
@@ -740,19 +740,18 @@ static NSString* MIME_JPEG    = @"image/jpeg";
     return (scaledImage == nil ? image : scaledImage);
 }
 
-- (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];
             }
@@ -760,48 +759,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) {
+                    
+                    // Copy custom choosen meta data stored in self.metadata 
to the image
+                    // This will make the image smaller
+                    NSMutableData *imageDataWithExif = nil;
+                    
                     if (self.metadata) {
+                        imageDataWithExif = [NSMutableData data];
+                        
+                        // Prepare source image
                         CGImageSourceRef sourceImage = 
CGImageSourceCreateWithData((__bridge CFDataRef)self.data, NULL);
                         CFStringRef sourceType = 
CGImageSourceGetType(sourceImage);
-
+                        
+                        // Prepare dest image
                         CGImageDestinationRef destinationImage = 
CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageDataWithExif, 
sourceType, 1, NULL);
+                        
+                        // Copy source to dest with metadata
                         CGImageDestinationAddImageFromSource(destinationImage, 
sourceImage, 0, (__bridge CFDictionaryRef)self.metadata);
                         CGImageDestinationFinalize(destinationImage);
 
                         CFRelease(sourceImage);
                         CFRelease(destinationImage);
-                    } else {
-                        imageDataWithExif = [self.data mutableCopy];
                     }
 
+                    NSData *imageDataToWrite = imageDataWithExif != nil ? 
imageDataWithExif : imageData;
+                    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 {
@@ -815,7 +823,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]

Reply via email to