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

作者: 黑白灰的绿i | 来源:发表于2016-08-31 10:20 被阅读915次

    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--拍照相关功能的实现

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