diff --git a/package.json b/package.json
index 541ce07..217c4ce 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "cordova-plugin-mediapicker-dmcbig",
- "version": "1.1.3",
- "description": "android mediaPicker support selection of multiple image and video",
+ "version": "2.0.0",
+ "description": "android ios mediaPicker support selection of multiple image and video",
"cordova": {
"id": "cordova-plugin-mediapicker-dmcbig",
"platforms": [
diff --git a/plugin.xml b/plugin.xml
index 6dcc2aa..a2d4b4b 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -1,20 +1,45 @@
-
-
- MediaPicker
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ MediaPicker
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/android/MediaPicker.java b/src/android/MediaPicker.java
index d933736..30873fc 100644
--- a/src/android/MediaPicker.java
+++ b/src/android/MediaPicker.java
@@ -229,7 +229,7 @@ public class MediaPicker extends CordovaPlugin {
byte[] imageBytes = baos.toByteArray();
encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
baos.close();
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
return encodedImage;
diff --git a/src/ios/DMCMediaPicker/CollectionViewCell.h b/src/ios/DMCMediaPicker/CollectionViewCell.h
new file mode 100644
index 0000000..1c5990c
--- /dev/null
+++ b/src/ios/DMCMediaPicker/CollectionViewCell.h
@@ -0,0 +1,12 @@
+
+
+#import
+
+
+@interface CollectionViewCell : UICollectionViewCell
+@property(nonatomic ,strong)UIImageView *imgView;
+@property(nonatomic ,strong)UIImageView *whiteView;
+@property(nonatomic ,strong)UIImageView *checkView;
+@property(nonatomic ,strong)UILabel *labelL;
+@property(nonatomic ,strong)UILabel *labelR;
+@end
diff --git a/src/ios/DMCMediaPicker/CollectionViewCell.m b/src/ios/DMCMediaPicker/CollectionViewCell.m
new file mode 100644
index 0000000..e77711c
--- /dev/null
+++ b/src/ios/DMCMediaPicker/CollectionViewCell.m
@@ -0,0 +1,45 @@
+
+
+#import "CollectionViewCell.h"
+
+@implementation CollectionViewCell
+- (id)initWithFrame:(CGRect)frame
+{
+ self = [super initWithFrame:frame];
+ if (self) {
+ CGFloat width=CGRectGetWidth(self.frame);
+
+ self.imgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, width, width)];
+ self.imgView.contentMode=UIViewContentModeScaleAspectFill;
+ self.imgView.clipsToBounds=YES;
+
+ CGFloat checkWidth=width/5;
+ self.checkView=[[UIImageView alloc]initWithFrame:CGRectMake(width-checkWidth-5, 5, checkWidth, checkWidth)];
+ self.whiteView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, width, width)];
+
+
+ CGFloat labelH=width/6;
+ self.labelL = [[UILabel alloc]initWithFrame:CGRectMake(0, width-labelH, width/2, labelH)];
+ self.labelL.textColor=[UIColor whiteColor];
+ self.labelL.font=[UIFont systemFontOfSize:13.0];
+ self.labelL.backgroundColor= [[UIColor blackColor] colorWithAlphaComponent:0.3f];
+
+
+ self.labelR = [[UILabel alloc]initWithFrame:CGRectMake(width/2, width-labelH, width/2, labelH)];
+ self.labelR.textColor=[UIColor whiteColor];
+ self.labelR.font=[UIFont systemFontOfSize:13.0];
+ self.labelR.textAlignment=NSTextAlignmentRight;
+ self.labelR.backgroundColor= [[UIColor blackColor] colorWithAlphaComponent:0.3f];
+
+
+
+ [self addSubview:self.imgView];
+ [self addSubview:self.whiteView];
+ [self addSubview:self.checkView];
+ [self addSubview:self.labelL];
+ [self addSubview:self.labelR];
+
+ }
+ return self;
+}
+@end
diff --git a/src/ios/DMCMediaPicker/DmcPickerViewController.h b/src/ios/DMCMediaPicker/DmcPickerViewController.h
new file mode 100644
index 0000000..5a2e2d8
--- /dev/null
+++ b/src/ios/DMCMediaPicker/DmcPickerViewController.h
@@ -0,0 +1,19 @@
+
+#import
+#import
+@protocol DmcPickerDelegate
+-(void) resultPicker:(NSMutableArray*) selectArray;
+@end
+
+@interface DmcPickerViewController : UIViewController {
+ NSMutableArray *_cellArray; //collectionView数据
+ PHFetchResult * fetchResult;
+ NSMutableArray *selectArray;
+}
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic,weak)id _delegate;
+/// Default is 9 / 默认最大可选9张图片
+@property (nonatomic, assign) NSInteger maxSelectCount;
+//'selectMode':101,//101=PICKER_IMAGE_VIDEO , 100=PICKER_IMAGE , 102=PICKER_VIDEO
+@property (nonatomic, assign) NSInteger selectMode;
+@end
diff --git a/src/ios/DMCMediaPicker/DmcPickerViewController.m b/src/ios/DMCMediaPicker/DmcPickerViewController.m
new file mode 100644
index 0000000..a139708
--- /dev/null
+++ b/src/ios/DMCMediaPicker/DmcPickerViewController.m
@@ -0,0 +1,273 @@
+
+
+#import "DmcPickerViewController.h"
+#import "CollectionViewCell.h"
+#import
+#define fDeviceWidth ([UIScreen mainScreen].bounds.size.width) //设备高度的宏
+#define fDeviceHeight ([UIScreen mainScreen].bounds.size.height)
+@interface DmcPickerViewController ()
+@property (strong, nonatomic) PHImageManager *manager;
+@end
+
+@implementation DmcPickerViewController
+
+- (void)viewDidLoad {
+ //init config
+ self.maxSelectCount=self.maxSelectCount>0?self.maxSelectCount:15;
+ self.selectMode=self.selectMode>0?self.selectMode:101;
+ //config end
+
+ [super viewDidLoad];
+ [self initView];
+ [self requestPermission];
+
+
+}
+
+-(void)initView{
+
+ [[self view]setBackgroundColor:[UIColor greenColor]];
+ UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done",nil) style:UIBarButtonItemStylePlain target:self action:@selector(done)];
+ UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel",nil) style:UIBarButtonItemStylePlain target:self action:@selector(cancel)];
+ self.navigationItem.rightBarButtonItem = rightButtonItem;
+ [self setDoneBtnStatus];
+ self.navigationItem.leftBarButtonItem=leftButtonItem;
+ self.navigationItem.title=NSLocalizedString(@"all",nil);
+
+ [self.view addSubview:self.collectionView];
+}
+
+-(void) done{
+ [self._delegate resultPicker:selectArray];
+ [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+-(void) cancel{
+ [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+-(void)requestPermission{
+ //监测权限
+ if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized) {
+ [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+ if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized) {
+ UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Unable to access album",nil) message:NSLocalizedString(@"Please allow to access your album",nil) preferredStyle:UIAlertControllerStyleAlert];
+ [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel",nil) style:UIAlertActionStyleDefault handler:nil]];
+ [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Setting",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
+ }]];
+ [self presentViewController:alert animated:YES completion:nil];
+ }else {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self getAlassetData];
+ });
+ }
+ }];
+ }else {
+ [self getAlassetData];
+ }
+}
+
+-(void) getAlassetData{
+
+ selectArray=[[NSMutableArray alloc] init];
+
+ // 获取所有资源的集合,并按资源的创建时间排序
+ PHFetchOptions *options = [[PHFetchOptions alloc] init];
+ options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
+ if(self.selectMode==100){
+ options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
+ }else if(self.selectMode==102){
+ options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeVideo];
+ }
+ fetchResult = [PHAsset fetchAssetsWithOptions:options];
+
+ _manager = [PHImageManager defaultManager];
+
+ [_collectionView reloadData];
+}
+
+
+
+#pragma mark - 创建collectionView并设置代理
+- (UICollectionView *)collectionView
+{
+ if (_collectionView == nil) {
+
+ UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
+
+
+ _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, fDeviceWidth, fDeviceHeight) collectionViewLayout:flowLayout];
+
+ int count=3;
+ if([[UIDevice currentDevice].model isEqualToString:@"iPad"]){
+ count=8;
+ }
+ //定义每个UICollectionView 的大小
+ flowLayout.itemSize = CGSizeMake((fDeviceWidth-2)/count, (fDeviceWidth-2)/count);
+ //定义每个UICollectionView 横向的间距
+ flowLayout.minimumLineSpacing = 1;
+ //定义每个UICollectionView 纵向的间距
+ flowLayout.minimumInteritemSpacing = 1;
+ //定义每个UICollectionView 的边距距
+ flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 5, 0);//上左下右
+
+ //注册cell和ReusableView(相当于头部)
+ [_collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
+ //[_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ReusableView"];
+
+ //设置代理
+ _collectionView.delegate = self;
+ _collectionView.dataSource = self;
+
+ //背景颜色
+ _collectionView.backgroundColor = [UIColor whiteColor];
+ //自适应大小
+ _collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+
+ }
+ return _collectionView;
+}
+
+
+
+
+#pragma mark - UICollectionView delegate dataSource
+#pragma mark 定义展示的UICollectionViewCell的个数
+-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
+{
+ return fetchResult.count;
+}
+
+#pragma mark 定义展示的Section的个数
+-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
+{
+ return 1;
+}
+
+#pragma mark 每个UICollectionView展示的内容
+-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+ static NSString *identify = @"cell";
+ CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identify forIndexPath:indexPath];
+ [cell sizeToFit];
+ PHAsset *asset=fetchResult[indexPath.item];
+ [_manager requestImageForAsset:asset
+ targetSize:CGSizeMake(200 , 200)
+ contentMode:PHImageContentModeAspectFill
+ options:nil
+ resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
+ cell.imgView.image = result;
+ }];
+ NSInteger i=[self isSelect:asset];
+ if(asset.mediaType==PHAssetMediaTypeVideo){
+ cell.labelL.hidden=NO;
+ cell.labelR.hidden=NO;
+
+ NSString *dtime=[NSString stringWithFormat:@"%.0f",asset.duration];
+ cell.labelL.text=[@"\t"stringByAppendingString:NSLocalizedString(@"Video",nil)];
+ cell.labelR.text=[[self getNewTimeFromDurationSecond:dtime.integerValue]stringByAppendingString:@"\t"];
+ }else{
+ cell.labelL.hidden=YES;
+ cell.labelR.hidden=YES;
+ }
+
+ if(i<0){
+ [self hidenSelectView:cell];
+ }else{
+ [self showSelectView:cell];
+ }
+ return cell;
+}
+
+
+//UICollectionView被选中时调用的方法
+-( void )collectionView:( UICollectionView *)collectionView didSelectItemAtIndexPath:( NSIndexPath *)indexPath{
+ NSLog(@"%ld",(long)indexPath.row);
+ PHAsset * asset=fetchResult[indexPath.row];
+ NSInteger i=[self isSelect:asset];
+ CollectionViewCell *cell = (CollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
+
+ if([selectArray count]>=self.maxSelectCount&&i<0){
+ [self alertMax];
+ }else{
+ if([selectArray count]>self.maxSelectCount){
+ [self alertMax];
+ }else{
+ i<0?[selectArray addObject:asset]:[selectArray removeObject:asset];
+ i<0?[self showSelectView:cell]:[self hidenSelectView:cell];
+ }
+ }
+
+ [self setDoneBtnStatus];
+}
+
+-(void)setDoneBtnStatus{
+ if([selectArray count]>0){
+ self.navigationItem.rightBarButtonItem.enabled= YES;
+ }else{
+ self.navigationItem.rightBarButtonItem.enabled= NO;
+ }
+}
+
+-(void)showSelectView:( CollectionViewCell *)cell{
+ cell.checkView.hidden=NO;
+ cell.whiteView.hidden=NO;
+ cell.whiteView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5];
+ cell.checkView.image=[UIImage imageNamed:@"dmcPicker.bundle/select80.png"];
+}
+
+-(void)hidenSelectView:( CollectionViewCell *)cell{
+ cell.checkView.hidden=YES;
+ cell.whiteView.hidden=YES;
+}
+
+
+
+-(NSInteger)isSelect:(PHAsset *)asset
+{
+ int is=-1;
+ if([selectArray count]<=0){
+ return is;
+ }
+ for(NSInteger i=0;i<[selectArray count];i++){
+ PHAsset *now=selectArray[i];
+ if ([asset.localIdentifier isEqualToString:now.localIdentifier]) {
+ return i;
+ }
+ }
+ return is;
+}
+
+- (void)didReceiveMemoryWarning {
+ [super didReceiveMemoryWarning];
+}
+
+-(void)alertMax{
+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@""
+ message:NSLocalizedString(@"maxSelectAlert",nil)
+ preferredStyle:UIAlertControllerStyleAlert];
+ UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"ok",nil) style:UIAlertActionStyleDefault handler:nil];
+ [alertController addAction:okAction];
+
+ [self presentViewController:alertController animated:YES completion:nil];
+}
+
+- (NSString *)getNewTimeFromDurationSecond:(NSInteger)duration {
+ NSString *newTime;
+ if (duration < 10) {
+ newTime = [NSString stringWithFormat:@"0:0%ld",(long)duration];
+ } else if (duration < 60) {
+ newTime = [NSString stringWithFormat:@"0:%ld",(long)duration];
+ } else {
+ NSInteger min = duration / 60;
+ NSInteger sec = duration - (min * 60);
+ if (sec < 10) {
+ newTime = [NSString stringWithFormat:@"%ld:0%ld",(long)min,(long)sec];
+ } else {
+ newTime = [NSString stringWithFormat:@"%ld:%ld",(long)min,(long)sec];
+ }
+ }
+ return newTime;
+}
+@end
diff --git a/src/ios/DMCMediaPicker/dmcPicker.bundle/select40.png b/src/ios/DMCMediaPicker/dmcPicker.bundle/select40.png
new file mode 100644
index 0000000..f40215d
Binary files /dev/null and b/src/ios/DMCMediaPicker/dmcPicker.bundle/select40.png differ
diff --git a/src/ios/DMCMediaPicker/dmcPicker.bundle/select80.png b/src/ios/DMCMediaPicker/dmcPicker.bundle/select80.png
new file mode 100644
index 0000000..a98a757
Binary files /dev/null and b/src/ios/DMCMediaPicker/dmcPicker.bundle/select80.png differ
diff --git a/src/ios/DMCMediaPicker/en.lproj/Localizable.strings b/src/ios/DMCMediaPicker/en.lproj/Localizable.strings
new file mode 100644
index 0000000..6806470
--- /dev/null
+++ b/src/ios/DMCMediaPicker/en.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Cancel"="Cancel";
+"Done"="Done";
+"all"="all";
+"Video"="Video";
+"maxSelectAlert"="Has reached the maximum number of choices";
+"ok"="OK";
+"Unable to access album" = "Unable to access album";
+"Please allow to access your album" = "Please allow to access your album in \"Settings -> Privacy -> Album\"";
+"Setting" = "Setting";
diff --git a/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings b/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings
new file mode 100644
index 0000000..3f14d2b
--- /dev/null
+++ b/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Cancel"="取消";
+"Done"="完成";
+"All"="所有";
+"Video"="视频";
+"maxSelectAlert"="已达到选择数量上限";
+"ok"="好";
+"Unable to access album" = "无法访问相册";
+"Please allow to access your album" = "请在设置-隐私-相册中允许访问相册";
+"Setting" = "设置";
diff --git a/src/ios/MediaPicker.m b/src/ios/MediaPicker.m
new file mode 100644
index 0000000..2c83f70
--- /dev/null
+++ b/src/ios/MediaPicker.m
@@ -0,0 +1,243 @@
+/********* 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{
+
+ [[PHImageManager defaultManager] requestExportSessionForVideo:asset options:nil exportPreset:AVAssetExportPresetPassthrough 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) {
+
+ NSLog(@"failed");
+
+ } else if(exportSession.status == AVAssetExportSessionStatusCompleted){
+
+ NSLog(@"completed!");
+
+ dispatch_async(dispatch_get_main_queue(), ^(void) {
+ 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