diff --git a/MediaPicker.m b/MediaPicker.m deleted file mode 100644 index 94237c5..0000000 --- a/MediaPicker.m +++ /dev/null @@ -1,244 +0,0 @@ -/********* 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]; - 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 *fullpath=[NSString stringWithFormat:@"%@/%@.%@", dmcPickerPath,[[NSProcessInfo processInfo] globallyUniqueString], @"jpg"]; - NSNumber *size=[NSNumber numberWithInt: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]; - } - } - - }]; -} - - - --(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]; - NSUInteger size=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:NSDataBase64Encoding64CharacterLineLength]; - 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:NSDataBase64Encoding64CharacterLineLength]; - return thumbnail; -} - - - -- (void)extractThumbnail:(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]; -} - --(int)getOrientation:(UIImage *)image{ - switch (image.imageOrientation) { - case UIImageOrientationDown: - return 180; - case UIImageOrientationDownMirrored: - return 180; - case UIImageOrientationLeft: - return 270; - case UIImageOrientationLeftMirrored: - return 270; - case UIImageOrientationRight: - return 90; - case UIImageOrientationRightMirrored: - return 90; - case UIImageOrientationUp: - return 0; - case UIImageOrientationUpMirrored: - return 0; - default: - return 0; - } -} -@end