Skip to content

Commit

Permalink
fix(ios): Sync camera API return to match Android changes
Browse files Browse the repository at this point in the history
  • Loading branch information
breautek committed Oct 26, 2024
1 parent 2eaa9a3 commit 64475f1
Showing 1 changed file with 30 additions and 4 deletions.
34 changes: 30 additions & 4 deletions src/ios/CDVCamera.m
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ Licensed to the Apache Software Foundation (ASF) under one
}
}

static NSString* MIME_PNG = @"image/png";
static NSString* MIME_JPEG = @"image/jpeg";

@implementation CDVPictureOptions

+ (instancetype) createFromTakePictureArguments:(CDVInvokedUrlCommand*)command
Expand Down Expand Up @@ -372,16 +375,37 @@ - (void)popoverControllerDidDismissPopover:(id)popoverController
self.hasPendingOperation = NO;
}

- (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPictureOptions*)options
- (NSString*) processImageAsDataUri:(UIImage*) image info:(NSDictionary*) info options:(CDVPictureOptions*) options
{
NSString* mime = nil;
NSData* data = [self processImage: image info: info options: options outMime: &mime];

NSString* base64 = toBase64(data);

if (base64 == nil) {
return nil;
}

return [NSString stringWithFormat:@"data:%@;base64,%@", mime, base64];
}

- (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);
Expand Down Expand Up @@ -439,7 +463,8 @@ - (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPic
default:
break;
};



return data;
}

Expand Down Expand Up @@ -564,16 +589,17 @@ - (void)resultForImage:(CDVPictureOptions*)options info:(NSDictionary*)info comp
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;
default: // DestinationTypeFileUri
{
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];
Expand Down

0 comments on commit 64475f1

Please sign in to comment.