iOS之录像 拍照

一、基本属性

UIKit -> UIImagePickerController

cameraCaptureMode 区分拍照  还是录像

区分 拍照 录像 cameraCaptureMode:

录像:UIImagePickerControllerCameraCaptureModeVideo

拍照:UIImagePickerControllerCameraCaptureModePhoto

区分 选择摄像头 相册sourceType

摄像头:UIImagePickerControllerSourceTypeCamera

相册:UIImagePickerControllerSourceTypePhotoLibrary

相册:UIImagePickerControllerSourceTypeSavedPhotosAlbum

区分 前后摄像头 cameraDevice

前摄像头:UIImagePickerControllerCameraDeviceFront

后置摄像头:UIImagePickerControllerCameraDeviceRear

设置是否显示  控制控件

showsCameraControls 默认显示控制控件

设置拍照

takePicture

录像

startVideoCapture

stopVideoCapture

设置视频清晰度video

设置闪光cameraFlashMode

1、UIImagePickerControllerCameraFlashModeOff 关闭的

2、UIImagePickerControllerCameraFlashModeAuto 自动 默认

3、UIImagePickerControllerCameraFlashModeOn 开启

UIImagePickerControllerQualityTypeHigh

UIImagePickerControllerQualityTypeMedium

UIImagePickerControllerQualityTypeLow

UIImagePickerControllerQualityType640x480

UIImagePickerControllerQualityTypeIFrame1280x720

UIImagePickerControllerQualityTypeIFrame960x540

videoMaximumDuration  设置视频最大的持续时间

cameraOverlayView 设置调用摄像头视图页面的  覆盖视图

设置拍照页面的形态 cameraViewTransform

代理

?????需要导入两个代理

UINavigationControllerDelegate、UIImagePickerControllerDelegate

在采集完成之后去  调用  不区分是拍照还是摄像都同样的调用这个方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;

采集取消的时候调用

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;

保存图片到相册UIImageWriteToSavedPhotosAlbum:

保存完成之后的回调

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo

代码示例、

导入框架:
#import <MobileCoreServices/MobileCoreServices.h>
#import "UIView+Transfrom.h"

宏定义:
#define SCREEN_BOUNDS [UIScreen mainScreen].bounds//屏幕尺寸
#define SCREEN_WIDTH CGRectGetWidth([UIScreen mainScreen].bounds)//屏幕宽
#define SCREEN_HEIGHT CGRectGetHeight([UIScreen mainScreen].bounds)//屏幕高

全局变量和导入代理
@interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
{
    UILabel *showTypeLabel;  //显示拍照或者录像的控件
    BOOL isMovie; //判断拍照  摄像的依据
    
    UIImageView *showMediaView; //显示拍照录像结果的视图
}
@end
- (void)viewDidLoad {
    [super viewDidLoad];
    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.view.backgroundColor = [UIColor greenColor];
    
    UISwitch *mediaSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(SCREEN_WIDTH-100, 50, 50, 50) ];
    [mediaSwitch addTarget:self action:@selector(changeMdiaType:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:mediaSwitch];
    
    
    showTypeLabel = [[UILabel alloc]initWithFrame:CGRectMake(CGRectGetMinX(mediaSwitch.frame), CGRectGetMinY(mediaSwitch.frame)-40, 50, 30)];
    showTypeLabel.textAlignment = NSTextAlignmentCenter;
    showTypeLabel.text = @"拍照";
    showTypeLabel.textColor = [UIColor lightGrayColor];
    showTypeLabel.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:showTypeLabel];
    
 
    showMediaView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 400, 250, 100)];
    showMediaView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:showMediaView];
    
  
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
      button.frame = CGRectMake(100, 100, 100, 100);
    [button setTitle:@"camera" forState:UIControlStateNormal];
     button.backgroundColor = [UIColor brownColor];
     [button addTarget:self action:@selector(doit:) forControlEvents:UIControlEventTouchUpInside];
     [self.view addSubview:button];
    
    
}

开关的触发方法  在这里给label添加特效   改变标签的文本
- (void)changeMdiaType:(UISwitch *)sender{
    [showTypeLabel rotation];
    showTypeLabel.text = sender.isOn != YES ? @"拍照" : @"录像";
    用来决定是录像还是拍照
    isMovie = sender.isOn;
    
}

按钮的触发事件
- (void)doit:(UIButton *)sender{
    UIImagePickerController *pickerController = [[UIImagePickerController alloc]init];
    pickerController.delegate = self;
//    选择摄像头设备
//    默认的是选择相册
    pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    
    if (isMovie == YES) {
        //    选择媒体类型  默认也是拍照的  拍照的时候不选择媒体类型  不会崩溃  是因为默认设置的是KUTTypeImage -> 包含在MobileCoreServices这个框架里边 需要的内容不是OC里面的字符串的类型  需要强制转换
        //    录制视频  类型要选择kUTTypeMovie 它里面包含了Audio Video
        pickerController.mediaTypes = @[(NSString *)kUTTypeMovie];
        
        //    设置录像 默认拍照 **********一定要先选择媒体的类型 否则程序崩溃
        pickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
    }
    

    
    [self presentViewController:pickerController animated:YES completion:nil];
    
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

    if ([info[UIImagePickerControllerMediaType] isEqualToString:(NSString *)kUTTypeMovie]) {
        NSLog(@"录完了");

NSString *path = (NSString *)[info[UIImagePickerControllerMediaURL] path];
       
UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
        

    }
    if ([info[UIImagePickerControllerMediaType] isEqualToString:(NSString *)kUTTypeImage]) {
        NSLog(@"拍完了");
拍的图片
        NSLog(@"%@",info[UIImagePickerControllerOriginalImage]);
        
        UIImage *finishImage = info[UIImagePickerControllerOriginalImage];
        
        showMediaView.image = nil;
        showMediaView.image = finishImage;
        
//        把图片转成二进制 保存起来
        NSData *imageData = UIImageJPEGRepresentation(finishImage, 0.1);
        
        NSData *imageData1 =   UIImagePNGRepresentation(finishImage);
        
//        把照片保存到相册的方法
        UIImageWriteToSavedPhotosAlbum(finishImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
        
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}

//视频保存到相册之后  调用
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    
    AVPlayer *player = [AVPlayer playerWithURL:[NSURL fileURLWithPath:videoPath]];
    AVPlayerViewController *vc = [[AVPlayerViewController alloc] init];
    vc.player = player;
    
    [self presentViewController:vc animated:YES completion:nil];
    
    [vc.player play];
    
}

//把照片保存到相册成功  调用这个方法
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    NSLog(@"保存成功");
    
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    NSLog(@"取消");
    [self dismissViewControllerAnimated:YES completion:nil];
}
时间: 2024-11-08 21:22:28

iOS之录像 拍照的相关文章

AForge.net 使用之录像拍照功能实现

原文地址:http://blog.csdn.net/chenhongwu666/article/details/41965801 连接摄像头设备,这里需要引入 AForge.Video; AForge.Video.DirectShow; AForge.Video.FFMPEG; 还需要添加引用,aforge.dll,aforge.video,aforge.video.directshow,aforge.control,aforge.video.ffmpeg, 在工具箱中还需要添加AForge.C

简单的使用ios自带拍照裁剪功能

今天项目里要用到图片的裁剪功能,本来想找第三方,但是查了下资料,觉得如果只是要简单的实现其实也不难,所以决定自己写一下 // 关于图片的选择 //点击要选取图片的view的时候要弹出两个选项,拍照和选取本地 - (void)addImageClick { [_drawlineView removeFromSuperview]; // [self takePhotoAction]; UIAlertController *actionSheet = [UIAlertController alertC

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

iOS开发–音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制

iOS音频播放、录音、视频播放、拍照、视频录制

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

html5图片上传时IOS和Android均显示摄像头拍照和图片选择

最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料,改为<input type="file" capture="camera">后,Android可显示相机和文档,但IOS则只有拍照选项了,最后通过判断设备类型使在IOS和Android下均可以显示拍照和图库选择,代码如下: var u = navigator.u

iOS拍照图片旋转的问题

很久之前,遇到了这种情况,iOS某端拍照上传到服务器,其他iOS端从服务器下载该照片展示,发现图片逆时针旋转了90度.当时百度了一下,找到一段代码修正image方向,问题解决了,但没有深入理解底层原理.最近又遇到这个问题,还是同样的解决方案.但是codereview的时候同事问为什么这么写,就深入研究了一下. 首先我们要知道image的imageOrientation属性.它是记录拍照时手机方向的,iOS默认横屏Home键在右侧为标准拍照姿势,imageOrientation为UIImageOr

[求助]谁能给我讲解一下,iOS编程要如何实时显示采集到的图像???

rt,最近搞一个高清图传,本着自(bu)主(mai)创(da)新(jiang)的原则,打算利用手中的iPad当作辅助飞行屏幕,USB传输数据.再说某疆图传7999(还只支持自家云台录像拍照),哪是我这等小学生消费得起的??? 现在刚绕明白OFDM正交子载波序列,又被接收端移动设备绕进去了.本来只考虑安卓的话是FT311无疑,但是……屏幕太小:换iOS?MFi过不去,只能类似电脑与iOS通讯方式. 通讯先不管,数据传进来如何显示???刷新率60Hz,先用Stream写成PNG再不断更新?还是直接按

音频播放、录音、视频播放、拍照、视频录制-b

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照