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 —————————打開視頻庫(kù)—————————————
- (void)openVideoLibrary{
//打開控制器
UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];
//設(shè)置媒體類型
picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//打開相冊(cè)庫(kù),用戶與電腦同步的,不能刪除
picker.delegate=self;
picker.allowsEditing=NO;
NSString*requiredMediaType1 = (NSString*)kUTTypeMovie;
NSArray*arrMediaTypes = [NSArrayarrayWithObjects:requiredMediaType1,nil];
[pickersetMediaTypes: arrMediaTypes];
//顯示控制器
[selfpresentViewController:pickeranimated:YEScompletion:nil];
}
#pragma mark —————————打開圖片庫(kù)—————————————
- (void)openPhotoLibrary {
//打開控制器
UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];
//設(shè)置媒體類型
picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//打開相冊(cè),獲取資源,視頻和圖片用戶拍攝的照片可以刪除,
picker.delegate=self;
//顯示控制器
[selfpresentViewController:pickeranimated:YEScompletion:nil];
}
#pragma mark —————————打開攝像頭拍照—————————————
- (void)openCamera {
//打開控制器
UIImagePickerController*picker = [[UIImagePickerControlleralloc]init];
//設(shè)置媒體類型
picker.sourceType=UIImagePickerControllerSourceTypeCamera;//設(shè)置攝像頭類型攝像頭
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);
}
//關(guān)閉控制器
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
#pragma mark —————————壓縮視頻—————————————
- (void)compressVideo:(NSURL*)url {
NSLog(@"壓縮");
//使用媒體工具(AVFoundation框架下的)
//Asset資源可以是圖片音頻視頻
AVAsset*asset=[AVAssetassetWithURL:url];
//設(shè)置壓縮的格式
AVAssetExportSession*session=[AVAssetExportSessionexportSessionWithAsset:assetpresetName:AVAssetExportPresetMediumQuality];//mediumquality:中等質(zhì)量
//設(shè)置導(dǎo)出路徑
NSString*path=[NSTemporaryDirectory()stringByAppendingPathComponent:[selfgetVideoNameBaseCurrentTime]];
//創(chuàng)建文件管理類導(dǎo)出失敗,刪除已經(jīng)導(dǎo)出的
NSFileManager*manager=[[NSFileManageralloc]init];
//刪除已經(jīng)存在的
[managerremoveItemAtPath:patherror:NULL];
//設(shè)置到處路徑
session.outputURL=[NSURLfileURLWithPath:path];
//設(shè)置輸出文件的類型
session.outputFileType=AVFileTypeQuickTimeMovie;
//開辟子線程處理耗時(shí)操作
[sessionexportAsynchronouslyWithCompletionHandler:^{
NSLog(@"導(dǎo)出完成!路徑:%@",path);
//? ? ? ? _path = path;
}];
}
#pragma mark —————————以當(dāng)前時(shí)間合成視頻名稱—————————————
- (NSString*)getVideoNameBaseCurrentTime {
NSDateFormatter*dateFormatter = [[NSDateFormatteralloc]init];
[dateFormattersetDateFormat:@"yyyyMMddHHmmss"];
return[[dateFormatterstringFromDate:[NSDatedate]]stringByAppendingString:@".mov"];
}
#pragma mark —————————?jiǎng)h除文件—————————————
- (BOOL)deleteDir:(NSString*)dirPath {
//如果存在臨時(shí)文件的配置文件
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