@@ -58,6 +58,9 @@ Licensed to the Apache Software Foundation (ASF) under one
58
58
}
59
59
}
60
60
61
+ static NSString * MIME_PNG = @" image/png" ;
62
+ static NSString * MIME_JPEG = @" image/jpeg" ;
63
+
61
64
@implementation CDVPictureOptions
62
65
63
66
+ (instancetype ) createFromTakePictureArguments : (CDVInvokedUrlCommand*)command
@@ -372,16 +375,50 @@ - (void)popoverControllerDidDismissPopover:(id)popoverController
372
375
self.hasPendingOperation = NO ;
373
376
}
374
377
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
376
411
{
377
412
NSData * data = nil ;
378
413
379
414
switch (options.encodingType ) {
380
415
case EncodingTypePNG:
381
416
data = UIImagePNGRepresentation (image);
417
+ if (outMime != nil ) *outMime = MIME_PNG;
382
418
break ;
383
419
case EncodingTypeJPEG:
384
420
{
421
+ if (outMime != nil ) *outMime = MIME_JPEG;
385
422
if ((options.allowsEditing == NO ) && (options.targetSize .width <= 0 ) && (options.targetSize .height <= 0 ) && (options.correctOrientation == NO ) && (([options.quality integerValue ] == 100 ) || (options.sourceType != UIImagePickerControllerSourceTypeCamera))){
386
423
// use image unedited as requested , don't resize
387
424
data = UIImageJPEGRepresentation (image, 1.0 );
@@ -439,7 +476,8 @@ - (NSData*)processImage:(UIImage*)image info:(NSDictionary*)info options:(CDVPic
439
476
default :
440
477
break ;
441
478
};
442
-
479
+
480
+
443
481
return data;
444
482
}
445
483
@@ -564,16 +602,17 @@ - (void)resultForImage:(CDVPictureOptions*)options info:(NSDictionary*)info comp
564
602
case DestinationTypeDataUrl:
565
603
{
566
604
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];
568
606
if (data) {
569
- result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsString: toBase64 ( data) ];
607
+ result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsString: data];
570
608
}
571
609
}
572
610
break ;
573
611
default : // DestinationTypeFileUri
574
612
{
575
613
image = [self retrieveImage: info options: options];
576
614
NSData * data = [self processImage: image info: info options: options];
615
+
577
616
if (data) {
578
617
if (pickerController.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
579
618
NSMutableData *imageDataWithExif = [NSMutableData data ];
@@ -823,7 +862,9 @@ - (void)imagePickerControllerReturnImageResult
823
862
switch (options.destinationType ) {
824
863
case DestinationTypeDataUrl:
825
864
{
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];
827
868
}
828
869
break ;
829
870
default : // DestinationTypeFileUri
0 commit comments