iOS 选择照片、视频、拍照并压缩视频获取压缩保存后路径的方法

2017-06-20  本文已影响154人  Aiana

iOS 选择照片、视频、拍照并压缩视频获取压缩保存后路径的方法

#import"ViewController.h"

#import

#import

#import

@interfaceViewController()

@property(nonatomic,strong)NSString* path;

@end

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {

//    [self openVideoLibrary];

[selfopenPhotoLibrary];

//    [self openCamera];

}

#pragma mark —————————打开视频库—————————————

- (void)openVideoLibrary{

//打开控制器

UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];

//设置媒体类型

picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//打开相册库,用户与电脑同步的,不能删除

picker.delegate=self;

picker.allowsEditing=NO;

NSString*requiredMediaType1 = (NSString*)kUTTypeMovie;

NSArray*arrMediaTypes = [NSArrayarrayWithObjects:requiredMediaType1,nil];

[pickersetMediaTypes: arrMediaTypes];

//显示控制器

[selfpresentViewController:pickeranimated:YEScompletion:nil];

}

#pragma mark —————————打开图片库—————————————

- (void)openPhotoLibrary {

//打开控制器

UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];

//设置媒体类型

picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//打开相册,获取资源,视频和图片用户拍摄的照片可以删除,

picker.delegate=self;

//显示控制器

[selfpresentViewController:pickeranimated:YEScompletion:nil];

}

#pragma mark —————————打开摄像头拍照—————————————

- (void)openCamera {

//打开控制器

UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];

//设置媒体类型

picker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置摄像头类型摄像头

picker.delegate=self;

//显示控制器

[selfpresentViewController:pickeranimated:YEScompletion:nil];

}

#pragma mark UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {

NSString*mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];

if([mediaTypeisEqualToString:@"public.movie"]) {

//如果是视频返回的是URL

NSURL* url=info[UIImagePickerControllerMediaURL];

NSLog(@"视频地址= %@",url);

//使用媒体工具压缩

[selfcompressVideo:url];

}else{

UIImage*image = [infoobjectForKey:UIImagePickerControllerOriginalImage];

NSLog(@"选择的照片= %@",image);

}

//关闭控制器

[selfdismissViewControllerAnimated:YEScompletion:nil];

}

#pragma mark —————————压缩视频—————————————

- (void)compressVideo:(NSURL*)url {

NSLog(@"压缩");

//使用媒体工具(AVFoundation框架下的)

//Asset资源可以是图片音频视频

AVAsset*asset=[AVAssetassetWithURL:url];

//设置压缩的格式

AVAssetExportSession*session=[AVAssetExportSessionexportSessionWithAsset:assetpresetName:AVAssetExportPresetMediumQuality];//mediumquality:中等质量

//设置导出路径

NSString*path=[NSTemporaryDirectory()stringByAppendingPathComponent:[selfgetVideoNameBaseCurrentTime]];

//创建文件管理类导出失败,删除已经导出的

NSFileManager*manager=[[NSFileManageralloc]init];

//删除已经存在的

[managerremoveItemAtPath:patherror:NULL];

//设置到处路径

session.outputURL=[NSURLfileURLWithPath:path];

//设置输出文件的类型

session.outputFileType=AVFileTypeQuickTimeMovie;

//开辟子线程处理耗时操作

[sessionexportAsynchronouslyWithCompletionHandler:^{

NSLog(@"导出完成!路径:%@",path);

//        _path = path;

}];

}

#pragma mark —————————以当前时间合成视频名称—————————————

- (NSString*)getVideoNameBaseCurrentTime {

NSDateFormatter*dateFormatter = [[NSDateFormatteralloc]init];

[dateFormattersetDateFormat:@"yyyyMMddHHmmss"];

return[[dateFormatterstringFromDate:[NSDatedate]]stringByAppendingString:@".mov"];

}

#pragma mark —————————删除文件—————————————

- (BOOL)deleteDir:(NSString*)dirPath {

//如果存在临时文件的配置文件

if([[NSFileManagerdefaultManager]fileExistsAtPath:dirPath]) {

NSError*error=nil;

return[[NSFileManagerdefaultManager]removeItemAtPath:dirPatherror:&error];

}

returnNO;

}

- (void)didReceiveMemoryWarning {

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

上一篇下一篇

猜你喜欢

热点阅读