From 376e3d600ab231696660a9326d488ed004ec537d Mon Sep 17 00:00:00 2001 From: DMC Date: Mon, 6 Aug 2018 16:55:04 +0800 Subject: [PATCH] add getExif fun --- src/ios/MediaPicker.m | 612 +++++++++++++++++++++++------------------- 1 file changed, 335 insertions(+), 277 deletions(-) diff --git a/src/ios/MediaPicker.m b/src/ios/MediaPicker.m index fed4317..3035927 100644 --- a/src/ios/MediaPicker.m +++ b/src/ios/MediaPicker.m @@ -1,300 +1,358 @@ -/********* MediaPicker.m Cordova Plugin Implementation *******/ - -#import -#import "DmcPickerViewController.h" -@interface MediaPicker : CDVPlugin { - // 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 +#import "DmcPickerViewController.h" +@interface MediaPicker : CDVPlugin { + // 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