add getExif fun

This commit is contained in:
DMC
2018-08-06 16:55:04 +08:00
committed by GitHub
parent 605ed5695b
commit 376e3d600a
+335 -277
View File
@@ -1,300 +1,358 @@
/********* MediaPicker.m Cordova Plugin Implementation *******/
#import <Cordova/CDV.h>
#import "DmcPickerViewController.h"
@interface MediaPicker : CDVPlugin <DmcPickerDelegate>{
// Member variables go here.
NSString* callbackId;
}
- (void)getMedias:(CDVInvokedUrlCommand*)command;
- (void)takePhoto:(CDVInvokedUrlCommand*)command;
- (void)extractThumbnail:(CDVInvokedUrlCommand*)command;
@end
@implementation MediaPicker
- (void)getMedias:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSDictionary *options = [command.arguments objectAtIndex: 0];
DmcPickerViewController * dmc=[[DmcPickerViewController alloc] init];
@try{
dmc.selectMode=[[options objectForKey:@"selectMode"]integerValue];
}@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
}
@try{
dmc.maxSelectCount=[[options objectForKey:@"maxSelectCount"]integerValue];
}@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
}
dmc._delegate=self;
[self.viewController presentViewController:[[UINavigationController alloc]initWithRootViewController:dmc] animated:YES completion:nil];
}
-(void) resultPicker:(NSMutableArray*) selectArray
{
NSString * tmpDir = NSTemporaryDirectory();
NSString *dmcPickerPath = [tmpDir stringByAppendingPathComponent:@"dmcPicker"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:dmcPickerPath ]){
[fileManager createDirectoryAtPath:dmcPickerPath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSMutableArray * aListArray=[[NSMutableArray alloc] init];
if([selectArray count]<=0){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
return;
}
dispatch_async(dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int index=0;
for(PHAsset *asset in selectArray){
@autoreleasepool {
if(asset.mediaType==PHAssetMediaTypeImage){
[self imageToSandbox:asset dmcPickerPath:dmcPickerPath aListArray:aListArray selectArray:selectArray index:index];
}else{
[self videoToSandboxCompress:asset dmcPickerPath:dmcPickerPath aListArray:aListArray selectArray:selectArray index:index];
}
}
index++;
}
});
}
-(void)imageToSandbox:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
NSString *filename=[asset valueForKey:@"filename"];
NSString *fullpath=[NSString stringWithFormat:@"%@/%@%@", dmcPickerPath,[[NSProcessInfo processInfo] globallyUniqueString], filename];
/********* MediaPicker.m Cordova Plugin Implementation *******/
#import <Cordova/CDV.h>
#import "DmcPickerViewController.h"
@interface MediaPicker : CDVPlugin <DmcPickerDelegate>{
// Member variables go here.
NSString* callbackId;
}
- (void)getMedias:(CDVInvokedUrlCommand*)command;
- (void)takePhoto:(CDVInvokedUrlCommand*)command;
- (void)extractThumbnail:(CDVInvokedUrlCommand*)command;
@end
@implementation MediaPicker
- (void)getMedias:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSDictionary *options = [command.arguments objectAtIndex: 0];
DmcPickerViewController * dmc=[[DmcPickerViewController alloc] init];
@try{
dmc.selectMode=[[options objectForKey:@"selectMode"]integerValue];
}@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
}
@try{
dmc.maxSelectCount=[[options objectForKey:@"maxSelectCount"]integerValue];
}@catch (NSException *exception) {
NSLog(@"Exception: %@", exception);
}
dmc._delegate=self;
[self.viewController presentViewController:[[UINavigationController alloc]initWithRootViewController:dmc] animated:YES completion:nil];
}
-(void) resultPicker:(NSMutableArray*) selectArray
{
NSString * tmpDir = NSTemporaryDirectory();
NSString *dmcPickerPath = [tmpDir stringByAppendingPathComponent:@"dmcPicker"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:dmcPickerPath ]){
[fileManager createDirectoryAtPath:dmcPickerPath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSMutableArray * aListArray=[[NSMutableArray alloc] init];
if([selectArray count]<=0){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
return;
}
dispatch_async(dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int index=0;
for(PHAsset *asset in selectArray){
@autoreleasepool {
if(asset.mediaType==PHAssetMediaTypeImage){
[self imageToSandbox:asset dmcPickerPath:dmcPickerPath aListArray:aListArray selectArray:selectArray index:index];
}else{
[self videoToSandboxCompress:asset dmcPickerPath:dmcPickerPath aListArray:aListArray selectArray:selectArray index:index];
}
}
index++;
}
});
}
-(void)imageToSandbox:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
NSString *filename=[asset valueForKey:@"filename"];
NSString *fullpath=[NSString stringWithFormat:@"%@/%@%@", dmcPickerPath,[[NSProcessInfo processInfo] globallyUniqueString], filename];
NSNumber *size=[NSNumber numberWithLong:imageData.length];
NSError *error = nil;
if (![imageData writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",@"image",@"mediaType",size,@"size",[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}];
NSError *error = nil;
if (![imageData writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",@"image",@"mediaType",size,@"size",[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}];
}
-(void)videoToSandbox:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *avsset, AVAudioMix *audioMix, NSDictionary *info) {
if ([avsset isKindOfClass:[AVURLAsset class]]) {
NSString *filename = [asset valueForKey:@"filename"];
AVURLAsset* urlAsset = (AVURLAsset*)avsset;
NSString *fullpath=[NSString stringWithFormat:@"%@/%@", dmcPickerPath,filename];
NSLog(@"%@", urlAsset.URL);
NSData *data = [NSData dataWithContentsOfURL:urlAsset.URL options:NSDataReadingUncached error:nil];
NSNumber* size=[NSNumber numberWithLong: data.length];
NSError *error = nil;
if (![data writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",size,@"size",@"video",@"mediaType" ,[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}
}];
}
-(void)videoToSandboxCompress:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
NSString *compressStartjs = [NSString stringWithFormat:@"MediaPicker.compressEvent('%@',%i)", @"start",index];
[self.commandDelegate evalJs:compressStartjs];
[[PHImageManager defaultManager] requestExportSessionForVideo:asset options:nil exportPreset:AVAssetExportPresetMediumQuality resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) {
NSString *fullpath=[NSString stringWithFormat:@"%@/%@.%@", dmcPickerPath,[[NSProcessInfo processInfo] globallyUniqueString], @"mp4"];
NSURL *outputURL = [NSURL fileURLWithPath:fullpath];
NSLog(@"this is the final path %@",outputURL);
exportSession.outputFileType=AVFileTypeMPEG4;
exportSession.outputURL=outputURL;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
if (exportSession.status == AVAssetExportSessionStatusFailed) {
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"compress failed"] callbackId:callbackId];
NSLog(@"failed");
} else if(exportSession.status == AVAssetExportSessionStatusCompleted){
NSLog(@"completed!");
NSString *compressCompletedjs = [NSString stringWithFormat:@"MediaPicker.compressEvent('%@',%i)", @"completed",index];
[self.commandDelegate evalJs:compressCompletedjs];
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",@"video",@"mediaType" ,[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}];
}];
}
-(NSString*)thumbnailVideo:(NSString*)path quality:(NSInteger)quality {
UIImage *shotImage;
//视频路径URL
NSURL *fileURL = [NSURL fileURLWithPath:path];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
shotImage = [[UIImage alloc] initWithCGImage:image];
CGImageRelease(image);
CGFloat q=quality/100.0f;
NSString *thumbnail=[UIImageJPEGRepresentation(shotImage,q) base64EncodedStringWithOptions:0];
return thumbnail;
}
- (void)takePhoto:(CDVInvokedUrlCommand*)command
{
}
-(NSString*)thumbnailImage:(NSString*)path quality:(NSInteger)quality{
UIImage *result = [[UIImage alloc] initWithContentsOfFile:path];
NSInteger qu = quality>0?quality:3;
CGFloat q=qu/100.0f;
NSString *thumbnail=[UIImageJPEGRepresentation(result,q) base64EncodedStringWithOptions:0];
return thumbnail;
}
- (void)extractThumbnail:(CDVInvokedUrlCommand*)command
- (void)getExif:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSMutableDictionary *options = [command.arguments objectAtIndex: 0];
NSString *thumbnail;
if([@"image" isEqualToString: [options objectForKey:@"mediaType"]]){
thumbnail=[self thumbnailImage:[options objectForKey:@"path"] quality:[[options objectForKey:@"thumbnailQuality"] integerValue]];
}else{
thumbnail=[self thumbnailVideo:[options objectForKey:@"path"] quality:[[options objectForKey:@"thumbnailQuality"] integerValue]];
}
[options setObject:thumbnail forKey:@"thumbnailBase64"];
NSNumber* rotate = [NSNumber numberWithInt:0];
[options setObject:rotate forKey:@"exifRotate"];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
}
- (void)compressImage:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSMutableDictionary *options = [command.arguments objectAtIndex: 0];
NSInteger quality=[[options objectForKey:@"quality"] integerValue];
if(quality<100&&[@"image" isEqualToString: [options objectForKey:@"mediaType"]]){
UIImage *result = [[UIImage alloc] initWithContentsOfFile: [options objectForKey:@"path"]];
NSInteger qu = quality>0?quality:3;
CGFloat q=qu/100.0f;
NSData *data =UIImageJPEGRepresentation(result,q);
NSString *dmcPickerPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"dmcPicker"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:dmcPickerPath ]){
[fileManager createDirectoryAtPath:dmcPickerPath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSString *filename=[NSString stringWithFormat:@"%@%@%@",@"dmcMediaPickerCompress", [self currentTimeStr],@".jpg"];
NSString *fullpath=[NSString stringWithFormat:@"%@/%@", dmcPickerPath,filename];
NSNumber* size=[NSNumber numberWithLong: data.length];
NSError *error = nil;
if (![data writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
[options setObject:fullpath forKey:@"path"];
[options setObject:size forKey:@"size"];
[options setObject:filename forKey:@"name"];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
}
NSData *imageData = [NSData dataWithContentsOfFile:[options objectForKey:@"path"] ];
//UIImage * image= [[UIImage alloc] initWithContentsOfFile:[options objectForKey:@"path"] ];
CGImageSourceRef imageRef=CGImageSourceCreateWithData((CFDataRef)imageData, NULL);
}else{
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
CFDictionaryRef imageInfo = CGImageSourceCopyPropertiesAtIndex(imageRef, 0,NULL);
NSLog(@"All Exif Info:%@",imageInfo);
NSDictionary *nsdic = (__bridge_transfer NSDictionary*)imageInfo;
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:nsdic] callbackId:callbackId];
}
}
//获取当前时间戳
- (NSString *)currentTimeStr{
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];//获取当前时间0秒后的时间
NSTimeInterval time=[date timeIntervalSince1970]*1000;// *1000 是精确到毫秒,不乘就是精确到秒
NSString *timeString = [NSString stringWithFormat:@"%.0f", time];
return timeString;
}
-(void)fileToBlob:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSData *result =[NSData dataWithContentsOfFile:[command.arguments objectAtIndex: 0]];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArrayBuffer:result]callbackId:command.callbackId];
}
}
-(void)videoToSandbox:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *avsset, AVAudioMix *audioMix, NSDictionary *info) {
if ([avsset isKindOfClass:[AVURLAsset class]]) {
NSString *filename = [asset valueForKey:@"filename"];
AVURLAsset* urlAsset = (AVURLAsset*)avsset;
NSString *fullpath=[NSString stringWithFormat:@"%@/%@", dmcPickerPath,filename];
NSLog(@"%@", urlAsset.URL);
NSData *data = [NSData dataWithContentsOfURL:urlAsset.URL options:NSDataReadingUncached error:nil];
NSNumber* size=[NSNumber numberWithLong: data.length];
NSError *error = nil;
if (![data writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",size,@"size",@"video",@"mediaType" ,[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}
}];
}
-(void)videoToSandboxCompress:(PHAsset *)asset dmcPickerPath:(NSString*)dmcPickerPath aListArray:(NSMutableArray*)aListArray selectArray:(NSMutableArray*)selectArray index:(int)index{
NSString *compressStartjs = [NSString stringWithFormat:@"MediaPicker.compressEvent('%@',%i)", @"start",index];
[self.commandDelegate evalJs:compressStartjs];
[[PHImageManager defaultManager] requestExportSessionForVideo:asset options:nil exportPreset:AVAssetExportPresetMediumQuality resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) {
NSString *fullpath=[NSString stringWithFormat:@"%@/%@.%@", dmcPickerPath,[[NSProcessInfo processInfo] globallyUniqueString], @"mp4"];
NSURL *outputURL = [NSURL fileURLWithPath:fullpath];
NSLog(@"this is the final path %@",outputURL);
exportSession.outputFileType=AVFileTypeMPEG4;
exportSession.outputURL=outputURL;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
if (exportSession.status == AVAssetExportSessionStatusFailed) {
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"compress failed"] callbackId:callbackId];
NSLog(@"failed");
} else if(exportSession.status == AVAssetExportSessionStatusCompleted){
NSLog(@"completed!");
NSString *compressCompletedjs = [NSString stringWithFormat:@"MediaPicker.compressEvent('%@',%i)", @"completed",index];
[self.commandDelegate evalJs:compressCompletedjs];
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:fullpath,@"path",@"video",@"mediaType" ,[NSNumber numberWithInt:index],@"index", nil];
[aListArray addObject:dict];
if([aListArray count]==[selectArray count]){
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:aListArray] callbackId:callbackId];
}
}
}];
}];
}
-(NSString*)thumbnailVideo:(NSString*)path quality:(NSInteger)quality {
UIImage *shotImage;
//视频路径URL
NSURL *fileURL = [NSURL fileURLWithPath:path];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
shotImage = [[UIImage alloc] initWithCGImage:image];
CGImageRelease(image);
CGFloat q=quality/100.0f;
NSString *thumbnail=[UIImageJPEGRepresentation(shotImage,q) base64EncodedStringWithOptions:0];
return thumbnail;
}
- (void)takePhoto:(CDVInvokedUrlCommand*)command
{
}
-(UIImage*)getThumbnailImage:(NSString*)path type:(NSString*)mtype{
UIImage *result;
if([@"image" isEqualToString: mtype]){
result= [[UIImage alloc] initWithContentsOfFile:path];
}else{
NSURL *fileURL = [NSURL fileURLWithPath:path];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
result = [[UIImage alloc] initWithCGImage:image];
}
return result;
}
-(NSString*)thumbnailImage:(UIImage*)result quality:(NSInteger)quality{
NSInteger qu = quality>0?quality:3;
CGFloat q=qu/100.0f;
NSString *thumbnail=[UIImageJPEGRepresentation(result,q) base64EncodedStringWithOptions:0];
return thumbnail;
}
- (void)extractThumbnail:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSMutableDictionary *options = [command.arguments objectAtIndex: 0];
UIImage * image=[self getThumbnailImage:[options objectForKey:@"path"] type:[options objectForKey:@"mediaType"]];
NSString *thumbnail=[self thumbnailImage:image quality:[[options objectForKey:@"thumbnailQuality"] integerValue]];
[options setObject:thumbnail forKey:@"thumbnailBase64"];
NSNumber* rotate = [NSNumber numberWithInt:[self getOrientation:image]];
[options setObject:rotate forKey:@"exifRotate"];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
}
- (void)compressImage:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSMutableDictionary *options = [command.arguments objectAtIndex: 0];
NSInteger quality=[[options objectForKey:@"quality"] integerValue];
if(quality<100&&[@"image" isEqualToString: [options objectForKey:@"mediaType"]]){
UIImage *result = [[UIImage alloc] initWithContentsOfFile: [options objectForKey:@"path"]];
NSInteger qu = quality>0?quality:3;
CGFloat q=qu/100.0f;
NSData *data =UIImageJPEGRepresentation(result,q);
NSString *dmcPickerPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"dmcPicker"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:dmcPickerPath ]){
[fileManager createDirectoryAtPath:dmcPickerPath withIntermediateDirectories:YES attributes:nil error:nil];
}
NSString *filename=[NSString stringWithFormat:@"%@%@%@",@"dmcMediaPickerCompress", [self currentTimeStr],@".jpg"];
NSString *fullpath=[NSString stringWithFormat:@"%@/%@", dmcPickerPath,filename];
NSNumber* size=[NSNumber numberWithLong: data.length];
NSError *error = nil;
if (![data writeToFile:fullpath options:NSAtomicWrite error:&error]) {
NSLog(@"%@", [error localizedDescription]);
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:[error localizedDescription]] callbackId:callbackId];
} else {
[options setObject:fullpath forKey:@"path"];
[options setObject:size forKey:@"size"];
[options setObject:filename forKey:@"name"];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
}
}else{
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:options] callbackId:callbackId];
}
}
//获取当前时间戳
- (NSString *)currentTimeStr{
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];//获取当前时间0秒后的时间
NSTimeInterval time=[date timeIntervalSince1970]*1000;// *1000 是精确到毫秒,不乘就是精确到秒
NSString *timeString = [NSString stringWithFormat:@"%.0f", time];
return timeString;
}
-(void)fileToBlob:(CDVInvokedUrlCommand*)command
{
callbackId=command.callbackId;
NSData *result =[NSData dataWithContentsOfFile:[command.arguments objectAtIndex: 0]];
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArrayBuffer:result]callbackId:command.callbackId];
}
//-(int)getOrientation:(UIImage *)image{
// switch (image.imageOrientation) {
// case UIImageOrientationDown:
// return 270;
// case UIImageOrientationDownMirrored:
// return 270;
// case UIImageOrientationLeft:
// return 0;
// case UIImageOrientationLeftMirrored:
// return 0;
// case UIImageOrientationRight:
// return 180;
// case UIImageOrientationRightMirrored:
// return 180;
// case UIImageOrientationUp:
// return 90;
// case UIImageOrientationUpMirrored:
// return 90;
// default:
// return 0;
// }
//}
-(int)getOrientation:(UIImage *)image{
switch (image.imageOrientation) {
case UIImageOrientationDown:
return 180;
return 270;
case UIImageOrientationDownMirrored:
return 180;
return 270;
case UIImageOrientationLeft:
return 270;
return 0;
case UIImageOrientationLeftMirrored:
return 270;
return 0;
case UIImageOrientationRight:
return 90;
return 180;
case UIImageOrientationRightMirrored:
return 90;
return 180;
case UIImageOrientationUp:
return 0;
return 90;
case UIImageOrientationUpMirrored:
return 0;
return 90;
default:
return 0;
}
}
@end
}
@end