Add base64 option

This commit is contained in:
Jérémy Magrin 2016-08-05 16:08:16 +02:00
parent 5c8b7f2fa7
commit 696ea848a1
2 changed files with 56 additions and 30 deletions

View File

@ -53,6 +53,7 @@ public class PickerModule extends ReactContextBaseJavaModule implements Activity
private boolean cropping = false;
private boolean multiple = false;
private boolean includeBase64 = false;
private int width = 100;
private int height = 100;
@ -76,6 +77,7 @@ public class PickerModule extends ReactContextBaseJavaModule implements Activity
}
multiple = options.hasKey("multiple") && options.getBoolean("multiple");
includeBase64 = options.hasKey("includeBase64") && options.getBoolean("includeBase64");
width = options.hasKey("width") ? options.getInt("width") : width;
height = options.hasKey("height") ? options.getInt("height") : height;
cropping = options.hasKey("cropping") ? options.getBoolean("cropping") : cropping;
@ -124,7 +126,6 @@ public class PickerModule extends ReactContextBaseJavaModule implements Activity
private WritableMap getImage(Uri uri, boolean resolvePath) {
WritableMap image = new WritableNativeMap();
String path = uri.getPath();
String data = getBase64StringFromFile(path);
if (resolvePath) {
path = RealPathUtil.getRealPathFromURI(activity, uri);
@ -140,12 +141,17 @@ public class PickerModule extends ReactContextBaseJavaModule implements Activity
BitmapFactory.decodeFile(path, options);
image.putString("path", "file://" + path);
image.putString("data", data);
image.putInt("width", options.outWidth);
image.putInt("height", options.outHeight);
image.putString("mime", options.outMimeType);
image.putInt("size", (int)fileLen);
if (includeBase64) {
String data = getBase64StringFromFile(path);
image.putString("data", data);
}
return image;
}

View File

@ -24,6 +24,7 @@ RCT_EXPORT_MODULE();
self.defaultOptions = @{
@"multiple": @NO,
@"cropping": @NO,
@"includeBase64": @NO,
@"maxFiles": @5,
@"width": @200,
@"height": @200
@ -85,7 +86,6 @@ RCT_EXPORT_METHOD(openPicker:(NSDictionary *)options
resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
UIImage *image = [UIImage imageWithData:imageData];
NSData *data = UIImageJPEGRepresentation(image, 1);
NSString *dataString = [data base64EncodedStringWithOptions:0];
NSString *filePath = [self persistFile:data];
if (filePath == nil) {
@ -93,14 +93,22 @@ RCT_EXPORT_METHOD(openPicker:(NSDictionary *)options
return;
}
[images addObject:@{
NSMutableDictionary *object = [NSMutableDictionary
dictionaryWithDictionary:@{
@"path": filePath,
@"data": dataString,
@"width": @(asset.pixelWidth),
@"height": @(asset.pixelHeight),
@"mime": @"image/jpeg",
@"size": [NSNumber numberWithUnsignedInteger:data.length]
}];
@"size": [NSNumber numberWithUnsignedInteger:data.length]}];
if ([[[self options] objectForKey:@"includeBase64"] boolValue]) {
NSString *dataString = [data base64EncodedStringWithOptions:0];
object[@"data"] = dataString;
}
[images addObject:[object copy]];
}];
}
@ -137,21 +145,28 @@ RCT_EXPORT_METHOD(openPicker:(NSDictionary *)options
} else {
UIImage *image = [UIImage imageWithData:imageData];
NSData *data = UIImageJPEGRepresentation(image, 1);
NSString *dataString = [data base64EncodedStringWithOptions:0];
NSString *filePath = [self persistFile:data];
if (filePath == nil) {
self.reject(ERROR_CANNOT_SAVE_IMAGE_KEY, ERROR_CANNOT_SAVE_IMAGE_MSG, nil);
return;
}
self.resolve(@{
NSMutableDictionary *object = [NSMutableDictionary
dictionaryWithDictionary:@{
@"path": filePath,
@"data": dataString,
@"width": @(asset.pixelWidth),
@"height": @(asset.pixelHeight),
@"mime": @"image/jpeg",
@"size": [NSNumber numberWithUnsignedInteger:data.length]
});
@"size": [NSNumber numberWithUnsignedInteger:data.length]}];
if ([[[self options] objectForKey:@"includeBase64"] boolValue]) {
NSString *dataString = [data base64EncodedStringWithOptions:0];
object[@"data"] = dataString;
}
self.resolve([object copy]);
[imagePickerController dismissViewControllerAnimated:YES completion:nil];
}
}];
@ -233,7 +248,6 @@ RCT_EXPORT_METHOD(openPicker:(NSDictionary *)options
CGSize resizedImageSize = CGSizeMake([[[self options] objectForKey:@"width"] intValue], [[[self options] objectForKey:@"height"] intValue]);
UIImage *resizedImage = [croppedImage resizedImageToFitInSize:resizedImageSize scaleIfSmaller:YES];
NSData *data = UIImageJPEGRepresentation(resizedImage, 1);
NSString *dataString = [data base64EncodedStringWithOptions:0];
NSString *filePath = [self persistFile:data];
if (filePath == nil) {
@ -241,16 +255,22 @@ RCT_EXPORT_METHOD(openPicker:(NSDictionary *)options
return;
}
NSDictionary *image = @{
NSMutableDictionary *image = [NSMutableDictionary
dictionaryWithDictionary:@{
@"path": filePath,
@"data": dataString,
@"width": @(resizedImage.size.width),
@"height": @(resizedImage.size.height),
@"mime": @"image/jpeg",
@"size": [NSNumber numberWithUnsignedInteger:data.length]
};
@"size": [NSNumber numberWithUnsignedInteger:data.length]}];
self.resolve(image);
if ([[[self options] objectForKey:@"includeBase64"] boolValue]) {
NSString *dataString = [data base64EncodedStringWithOptions:0];
image[@"data"] = dataString;
}
self.resolve([image copy]);
[controller dismissViewControllerAnimated:YES completion:nil];
}