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

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

作者: Aiana | 来源:发表于2017-06-20 23:12 被阅读154次

    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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lyaaqxtx.html