iOS--拍照相关功能的实现

1. 导入四个拍照依赖的框架 

.framework框架


2. 在相应controller中引入头文件

头文件

然后不要忘记遵守协议UIImagePickerControllerDelegate

3. 设置拍照绑定的方法和相关属性

(1)判断是否有摄像头。


判断摄像头

(2)设置属性

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

imagePickerController.delegate = self;  // 设置委托

imagePickerController.sourceType = sourceType;

imagePickerController.allowsEditing = YES;

下面这个属性的意义是,iOS8以后拍照的页面跳转会卡顿几秒中,加入这个属性,卡顿消失,啦啦啦

imagePickerController.modalPresentationStyle=UIModalPresentationOverCurrentContext;

下面进行拍照的页面跳转,这里用的是模态的形式展示

[self presentViewController:imagePickerController animated:YES completion:nil];

3. 进入拍照页面,拍照完成后点击使用照片,会自动调用下面的方法

//完成拍照

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

(1)定义UIImage类型image将得到的图片给到image

image = [info objectForKey:UIImagePickerControllerEditedImage];

if (image == nil)

image = [info objectForKey:UIImagePickerControllerOriginalImage];

(2)将得到的图片储存在沙盒下

tempImage 是所得到的照片

imageName 是路径的名字(这里我使用的是拍照时的时间)

- (BOOL)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",imageName]];

// 保存文件的名称

BOOL result = [UIImagePNGRepresentation(tempImage)writeToFile: filePath atomically:YES];

return result;

}

(3)对照片进行处理,通常拍照功能都是将照片上传至网络,这时候需要对图片进行相应的压缩处理,图片转换成data的方法

NSData *data=UIImageJPEGRepresentation(image, 1.0);

根据图片大小,对图片进行不同程度的压缩(根据情况而定)

if (data.length>100*1024) {

if (data.length>1024*1024) {//1M以及以上

data1=UIImageJPEGRepresentation(image, 0.1);

}else if (data.length>512*1024) {//0.5M-1M

data1=UIImageJPEGRepresentation(image, 0.4);

}else if (data.length>200*1024) {//0.25M-0.5M

data1=UIImageJPEGRepresentation(image, 0.6);

}

}

4. 将照片发送到服务器,这里我使用的是NSURLSession。

(1)我用的post方法,首先是基本设置

//构造URL

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@""]];

//构造Request

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

//设置为POST请求

[request setHTTPMethod:@"POST"];

//超时

[request setTimeoutInterval:20];

(2)设置请求头和请求体

[request setValue: forHTTPHeaderField:];

//这里的data就是图片转换后的data

[request setHTTPBody:data];

(3)构造Session

NSURLSession *session = [NSURLSession sharedSession];

(4)设置网络请求方法

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){

}

END!!!!!!

你可能感兴趣的:(iOS--拍照相关功能的实现)