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

normanbreau 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 7adccc8  fix(ios): Sync camera API return to match Android changes 
(#911)
7adccc8 is described below

commit 7adccc8ee926fd8c3fb2937123585eb37613ead0
Author: Norman Breau <nor...@breautek.com>
AuthorDate: Sun Oct 27 08:32:38 2024 -0300

    fix(ios): Sync camera API return to match Android changes (#911)
---
 src/ios/CDVCamera.m | 51 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 5 deletions(-)

diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m
index 6793da4..9fb6c73 100644
--- a/src/ios/CDVCamera.m
+++ b/src/ios/CDVCamera.m
@@ -58,6 +58,9 @@ static NSString* toBase64(NSData* data) {
     }
 }
 
+static NSString* MIME_PNG     = @"image/png";
+static NSString* MIME_JPEG    = @"image/jpeg";
+
 @implementation CDVPictureOptions
 
 + (instancetype) createFromTakePictureArguments:(CDVInvokedUrlCommand*)command
@@ -372,16 +375,50 @@ static NSString* toBase64(NSData* data) {
     self.hasPendingOperation = NO;
 }
 
-- (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info 
options:(CDVPictureOptions*)options
+- (NSString*) getMimeForEncoding:(CDVEncodingType) encoding {
+    switch (encoding) {
+        case EncodingTypePNG: return MIME_PNG;
+        case EncodingTypeJPEG:
+        default:
+            return MIME_JPEG;
+    }
+}
+
+- (NSString*) formatAsDataURI:(NSData*) data withMIME:(NSString*) mime {
+    NSString* base64 = toBase64(data);
+    
+    if (base64 == nil) {
+        return nil;
+    }
+    
+    return [NSString stringWithFormat:@"data:%@;base64,%@", mime, base64];
+}
+
+- (NSString*) processImageAsDataUri:(UIImage*) image info:(NSDictionary*) info 
options:(CDVPictureOptions*) options
+{
+    NSString* mime = nil;
+    NSData* data = [self processImage: image info: info options: options 
outMime: &mime];
+    
+    return [self formatAsDataURI: data withMIME: mime];
+}
+
+- (NSData*) processImage:(UIImage*) image info:(NSDictionary*) info 
options:(CDVPictureOptions*) options
+{
+    return [self processImage:image  info: info options: options outMime: nil];
+}
+
+- (NSData*) processImage:(UIImage*)image info:(NSDictionary*)info 
options:(CDVPictureOptions*)options outMime:(NSString**) outMime
 {
     NSData* data = nil;
 
     switch (options.encodingType) {
         case EncodingTypePNG:
             data = UIImagePNGRepresentation(image);
+            if (outMime != nil) *outMime = MIME_PNG;
             break;
         case EncodingTypeJPEG:
         {
+            if (outMime != nil) *outMime = MIME_JPEG;
             if ((options.allowsEditing == NO) && (options.targetSize.width <= 
0) && (options.targetSize.height <= 0) && (options.correctOrientation == NO) && 
(([options.quality integerValue] == 100) || (options.sourceType != 
UIImagePickerControllerSourceTypeCamera))){
                 // use image unedited as requested , don't resize
                 data = UIImageJPEGRepresentation(image, 1.0);
@@ -439,7 +476,8 @@ static NSString* toBase64(NSData* data) {
         default:
             break;
     };
-
+    
+    
     return data;
 }
 
@@ -564,9 +602,9 @@ static NSString* toBase64(NSData* data) {
         case DestinationTypeDataUrl:
         {
             image = [self retrieveImage:info options:options];
-            NSData* data = [self processImage:image info:info options:options];
+            NSString* data = [self processImageAsDataUri:image info:info 
options:options];
             if (data)  {
-                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 
messageAsString:toBase64(data)];
+                result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 
messageAsString: data];
             }
         }
             break;
@@ -574,6 +612,7 @@ static NSString* toBase64(NSData* data) {
         {
             image = [self retrieveImage:info options:options];
             NSData* data = [self processImage:image info:info options:options];
+            
             if (data) {
                 if (pickerController.sourceType == 
UIImagePickerControllerSourceTypePhotoLibrary) {
                     NSMutableData *imageDataWithExif = [NSMutableData data];
@@ -823,7 +862,9 @@ static NSString* toBase64(NSData* data) {
     switch (options.destinationType) {
         case DestinationTypeDataUrl:
         {
-            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 
messageAsString:toBase64(self.data)];
+            NSString* mime = [self getMimeForEncoding: 
self.pickerController.pictureOptions.encodingType];
+            NSString* uri = [self formatAsDataURI: self.data withMIME: mime];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 
messageAsString: uri];
         }
             break;
         default: // DestinationTypeFileUri


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to