博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 音视频录制之录制视频,UIImagePickerController拍照录视频选取视频图片,AVFoundation
阅读量:3731 次
发布时间:2019-05-22

本文共 6880 字,大约阅读时间需要 22 分钟。

文章目录

读《疯狂iOS讲义(下)》笔记

UIImagePickerController拍照录视频选取图片

思路

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
list文件需要添加:

NSCameraUsageDescription
NSMicrophoneUsageDescription
NSPhotoLibraryAddUsageDescription
////  ViewController.m//  ImagePickerDemo////  Created by  on 2020/2/27.//  Copyright © 2020 Shae. All rights reserved.//#import "ViewController.h"#import 
#import
#import
@interface ViewController ()
@end@implementation ViewControllerUIImagePickerController *picker;- (void)viewDidLoad {
[super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"%d",testprefix); picker=[[UIImagePickerController alloc]init]; picker.delegate=self;}- (IBAction)takePhoto:(UIButton *)sender {
//如果拍摄的摄像头可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
//将sourceType设置为UIImagePickerControllerSourceTypeCamera代表拍照或拍视频 picker.sourceType=UIImagePickerControllerSourceTypeCamera; //设置拍照照片 picker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto; //设置使用手机的前置摄像头 //picker.cameraDevice=UIImagePickerControllerCameraDeviceFront; //设置拍摄的照片允许编辑 picker.allowsEditing=YES; }else{
NSLog(@"无法打开摄像头"); } //显示picker视图控制器 [self presentViewController:picker animated:YES completion:nil]; }- (IBAction)takeVideo:(UIButton *)sender {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
// 将sourceType设为UIImagePickerControllerSourceTypeCamera代表拍照或拍视频 picker.sourceType=UIImagePickerControllerSourceTypeCamera; //将mediaTypes设置为所有支持的多媒体类型 picker.mediaTypes=[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; //设置拍摄视频 picker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo; //设置拍摄高质量的视频 picker.videoQuality=UIImagePickerControllerQualityTypeHigh; }else{
NSLog(@"无法打开摄像头"); } [self presentViewController:picker animated:YES completion:nil];}- (IBAction)loadPhoto:(UIButton *)sender {
//设置选择加载相册的图片或视频 picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//y图片视频 //picker.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;//仅图片 picker.allowsEditing=YES; [self presentViewController:picker animated:YES completion:nil];}//当得到照片或者视频j后,调用该委托方法- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info{
NSLog(@"成功:%@",info); //获取用户拍摄的是照片还是视频 NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType]; //判断获取类型:图片,并且是刚拍摄的图片 if ([mediaType isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) {
UIImage *theImage=nil; //判断,图片是否允许篡改 if ([picker allowsEditing]) {
//获取用户编辑之后的图像 theImage=[info objectForKey:UIImagePickerControllerEditedImage]; }else{
//获取原始的照片 theImage=[info objectForKey:UIImagePickerControllerOriginalImage]; } //保存图片到相册中 UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil); }else if ([mediaType isEqualToString:(NSString*)kUTTypeMovie]){
//获取视频文件的url NSURL *mediaURL=[info objectForKey:UIImagePickerControllerMediaURL]; //将视频保存到媒体库 UISaveVideoAtPathToSavedPhotosAlbum(mediaURL.path,self,@selector(video:didFinishSavingWithError:contextInfo:),nil); NSLog(@"mediaURL.path:%@",mediaURL.path); }else if ([mediaType isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypePhotoLibrary){
//呈现选取的照片 if ([picker allowsEditing]) {
//获取用户编辑之后的图像 self.loadImageView.image=[info objectForKey:UIImagePickerControllerEditedImage]; }else{
//获取原始的照片 self.loadImageView.image=[info objectForKey:UIImagePickerControllerOriginalImage]; } } //隐藏UIImagePickerController [picker dismissViewControllerAnimated:YES completion:nil];}// UISaveVideoAtPathToSavedPhotosAlbum 视频保存回调- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo {
NSLog(@"%@",videoPath); NSLog(@"%@",error); }//当用户取消时,调用该代理方法- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"用户取消的拍摄"); //隐藏UIImagePickerController [picker dismissViewControllerAnimated:YES completion:nil];}@end

demo

简单封装一下

@property (nonatomic,strong)UIImagePickerController *picker;
- (UIImagePickerController *)picker{
if (_picker==nil) {
_picker=[[UIImagePickerController alloc]init]; _picker.delegate=self; } return _picker;}
//调用 [self takePicture:UIImagePickerControllerCameraDeviceRear];
/** 封装的拍照拍照接口 cameraDevice: UIImagePickerControllerCameraDeviceRear UIImagePickerControllerCameraDeviceFront */-(void)takePicture:(UIImagePickerControllerCameraDevice)cameraDevice{
//如果拍摄的摄像头可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
//将sourceType设置为UIImagePickerControllerSourceTypeCamera代表拍照或拍视频 self.picker.sourceType=UIImagePickerControllerSourceTypeCamera; //设置拍照照片 self.picker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto; //设置使用手机的前置摄像头 self.picker.cameraDevice=cameraDevice; //设置拍摄的照片允许编辑 self.picker.allowsEditing=YES; }else{
NSLog(@"无法打开摄像头"); return; } //显示picker视图控制器 [self presentViewController:self.picker animated:YES completion:nil];}
#pragma mark -UIImagePickerControllerDelegate-//当得到照片或者视频j后,调用该委托方法- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info{
NSLog(@"成功:%@",info); //获取用户拍摄的是照片还是视频 NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType]; NSLog(@"标记"); //判断获取类型:图片,并且是刚拍摄的图片 if ([mediaType isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) {
NSLog(@"标记1"); UIImage *theImage=nil; //判断,图片是否允许篡改 if ([picker allowsEditing]) {
//获取用户编辑之后的图像 theImage=[info objectForKey:UIImagePickerControllerEditedImage]; }else{
//获取原始的照片 theImage=[info objectForKey:UIImagePickerControllerOriginalImage]; } //保存图片到相册中 //UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil); NSLog(@"标记2"); //隐藏UIImagePickerController [_picker dismissViewControllerAnimated:YES completion:nil]; }}

转载地址:http://jiwin.baihongyu.com/

你可能感兴趣的文章
计算机网络经典面试题目-----三次握手四次断开
查看>>
高可用和负载均衡学习笔记
查看>>
浅谈列表和元组的区别
查看>>
mysql学习笔记--主从复制
查看>>
mysql学习笔记-----读写分离+高可用
查看>>
mysql学习笔记---sql语句
查看>>
minikube 学习笔记 -- deployment 详解
查看>>
09.FormData对象实现二进制文件上传(实现图片预览功能)
查看>>
1.JSONP解决同源限制(基础)
查看>>
02.JSONP代码优化01(实现点击触发JSONP)
查看>>
03.JSONP代码优化02(实现客户端接受函数名和服务器返回函数名不同问题)
查看>>
04.JSONP代码优化03(封装JSONP函数)
查看>>
05.JSONP代码优化04(服务器端代码优化)
查看>>
案例:使用jsonp获取腾讯天气信息
查看>>
CORS跨域资源共享
查看>>
CORS跨域资源共享(方式二)
查看>>
jQuery 中的 Ajax
查看>>
RESTful风格的API
查看>>
Vue全家桶-前端路由
查看>>
ES6模块化--babel
查看>>