Skip to content

Commit 7adccc8

Browse files
authored
fix(ios): Sync camera API return to match Android changes (#911)
1 parent 5379545 commit 7adccc8

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

src/ios/CDVCamera.m

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ Licensed to the Apache Software Foundation (ASF) under one
5858
}
5959
}
6060

61+
static NSString* MIME_PNG = @"image/png";
62+
static NSString* MIME_JPEG = @"image/jpeg";
63+
6164
@implementation CDVPictureOptions
6265

6366
+ (instancetype) createFromTakePictureArguments:(CDVInvokedUrlCommand*)command
@@ -372,16 +375,50 @@ - (void)popoverControllerDidDismissPopover:(id)popoverController
372375
self.hasPendingOperation = NO;
373376
}
374377

375-
- (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPictureOptions*)options
378+
- (NSString*) getMimeForEncoding:(CDVEncodingType) encoding {
379+
switch (encoding) {
380+
case EncodingTypePNG: return MIME_PNG;
381+
case EncodingTypeJPEG:
382+
default:
383+
return MIME_JPEG;
384+
}
385+
}
386+
387+
- (NSString*) formatAsDataURI:(NSData*) data withMIME:(NSString*) mime {
388+
NSString* base64 = toBase64(data);
389+
390+
if (base64 == nil) {
391+
return nil;
392+
}
393+
394+
return [NSString stringWithFormat:@"data:%@;base64,%@", mime, base64];
395+
}
396+
397+
- (NSString*) processImageAsDataUri:(UIImage*) image info:(NSDictionary*) info options:(CDVPictureOptions*) options
398+
{
399+
NSString* mime = nil;
400+
NSData* data = [self processImage: image info: info options: options outMime: &mime];
401+
402+
return [self formatAsDataURI: data withMIME: mime];
403+
}
404+
405+
- (NSData*) processImage:(UIImage*) image info:(NSDictionary*) info options:(CDVPictureOptions*) options
406+
{
407+
return [self processImage:image info: info options: options outMime: nil];
408+
}
409+
410+
- (NSData*) processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPictureOptions*)options outMime:(NSString**) outMime
376411
{
377412
NSData* data = nil;
378413

379414
switch (options.encodingType) {
380415
case EncodingTypePNG:
381416
data = UIImagePNGRepresentation(image);
417+
if (outMime != nil) *outMime = MIME_PNG;
382418
break;
383419
case EncodingTypeJPEG:
384420
{
421+
if (outMime != nil) *outMime = MIME_JPEG;
385422
if ((options.allowsEditing == NO) && (options.targetSize.width <= 0) && (options.targetSize.height <= 0) && (options.correctOrientation == NO) && (([options.quality integerValue] == 100) || (options.sourceType != UIImagePickerControllerSourceTypeCamera))){
386423
// use image unedited as requested , don't resize
387424
data = UIImageJPEGRepresentation(image, 1.0);
@@ -439,7 +476,8 @@ - (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPic
439476
default:
440477
break;
441478
};
442-
479+
480+
443481
return data;
444482
}
445483

@@ -564,16 +602,17 @@ - (void)resultForImage:(CDVPictureOptions*)options info:(NSDictionary*)info comp
564602
case DestinationTypeDataUrl:
565603
{
566604
image = [self retrieveImage:info options:options];
567-
NSData* data = [self processImage:image info:info options:options];
605+
NSString* data = [self processImageAsDataUri:image info:info options:options];
568606
if (data) {
569-
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:toBase64(data)];
607+
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: data];
570608
}
571609
}
572610
break;
573611
default: // DestinationTypeFileUri
574612
{
575613
image = [self retrieveImage:info options:options];
576614
NSData* data = [self processImage:image info:info options:options];
615+
577616
if (data) {
578617
if (pickerController.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
579618
NSMutableData *imageDataWithExif = [NSMutableData data];
@@ -823,7 +862,9 @@ - (void)imagePickerControllerReturnImageResult
823862
switch (options.destinationType) {
824863
case DestinationTypeDataUrl:
825864
{
826-
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:toBase64(self.data)];
865+
NSString* mime = [self getMimeForEncoding: self.pickerController.pictureOptions.encodingType];
866+
NSString* uri = [self formatAsDataURI: self.data withMIME: mime];
867+
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: uri];
827868
}
828869
break;
829870
default: // DestinationTypeFileUri

0 commit comments

Comments
 (0)