读书笔记---照相机与摄像头

其实照相机的代码,网络里已经满天飞了,几乎不用怎么再看,现在就稍微记录一下

<span style="font-size:18px;">- (IBAction)takeImage:(id)sender {    
    
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {//判断是否可用
        
        _imagePicker = [[UIImagePickerController alloc] init];
        _imagePicker.delegate = self;
        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;//设置类型
        
        [self presentViewController:_imagePicker animated:YES completion:nil];
    } else {
        
        NSLog(@"照相机不可用。");
    }
}


- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void) imagePickerController: (UIImagePickerController *) picker
    didFinishPickingMediaWithInfo: (NSDictionary *) info {
    
    UIImage *originalImage = (UIImage *) [info objectForKey:
                                          UIImagePickerControllerOriginalImage];
    
    self.imageView.image = originalImage;
    self.imageView.contentMode = UIViewContentModeScaleAspectFill;    
    
    [self dismissViewControllerAnimated:YES completion:nil];
    
}</span>

还需要注意- (void) imagePickerController: (UIImagePickerController *) picker

    didFinishPickingMediaWithInfo: (NSDictionary *) info里的信息


例如:

UIImagePickerControllerOriginalImage 获取原始图片信息键

UIImagePickerControllerEditedImage 编辑后的图片数据键

UIImagePickerControllerMediaType 由用户指定的媒体类型键

UIImagePickerControllerCropRect 剪裁后的图片数据键

UIImagePickerControllerMediaURL 视频存放路径键

UIImagePickerControllerReferenceURL 原始选择项的URL

UIImagePickerControllerMediaMetadata 只有在使用摄像头并且是图像类型的时候有效.包含选择图像信息的字典类型


还有一个要注意的就是保存图片的方法

<span style="font-size:18px;">UIImageWriteToSavedPhotosAlbum(editedImage, self,
                                   @selector(image:didFinishSavingWithError:contextInfo:),
                                   NULL);
</span>

在这里 selector的方法可以随便命名,但是必须包含三个参数,image,error和contextInfo例如

<span style="font-size:18px;">
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error
  contextInfo:(void *)contextInfo {
    UIAlertView *alert;
    
    if (error) {
        alert = [[UIAlertView alloc] initWithTitle:@"错误"
                                           message:@"保存图片失败。"
                                          delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    } else {
        alert = [[UIAlertView alloc] initWithTitle:@"成功"
                                           message:@"保存图片成功。"
                                          delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    }
    [alert show];
   [self dismissViewControllerAnimated:YES completion:nil];
}

</span>

下面是我的一点补充:

利用UIImagePickerControllerReferenceURL 我们也可以进行以下操作

<span style="font-size:18px;">self.item.backgroundImg = [NSString stringWithFormat:@"%@",[info objectForKey:UIImagePickerControllerReferenceURL]] ;

[self.libaray assetForURL:[NSURL URLWithString:self.item.backgroundImg] resultBlock:^(ALAsset *asset){
                    //获取资源图片的详细资源信息
                    ALAssetRepresentation* representation = [asset defaultRepresentation];
                    //获取资源图片的高清图
                    image = [UIImage imageWithCGImage:[representation fullScreenImage]];
                    if (!image) {
                        image = [UIImage imageNamed:@"1.jpg"];
                    }
                    self.backGroundImageView.image = image;
                } failureBlock:^(NSError *error){
                    
                }];
</span>

下面是我觉得一个比较有意思的技术,之前没接触过,添加照相机图层

<span style="font-size:18px;">
_imagePicker.cameraOverlayView = [self customOverlayView];  //在相机的overlayView上添加图层      
        _imagePicker.showsCameraControls = NO;//隐藏照相机控件按钮
        
        CGFloat camScaleup = 1.8;//放大照相机图层
        _imagePicker.cameraViewTransform = CGAffineTransformScale(_imagePicker.cameraViewTransform, camScaleup, camScaleup);</span>

这样你在想要的方法里,添加想要的图层就可以了,我想水印相机就是这个原理吧!


通过AVFoundation 捕获视频


//实例化视频捕获对象
    AVCaptureSession *session = [[AVCaptureSession alloc]init];
    
    //设置画质
    session.sessionPreset = AVCaptureSessionPresetMedium;
    
    //创建视频图层
    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];
    
    captureVideoPreviewLayer.frame = CGRectMake(0, 0, 320, 568);
    
    //设置缩放比例
    CGFloat camScaleup = 1.8;
    captureVideoPreviewLayer.affineTransform = CGAffineTransformMakeScale(camScaleup, camScaleup);
    
    [self.view.layer addSublayer:captureVideoPreviewLayer];
    
    //指定媒体类型获得默认捕获设备AVCaptureDevice对象
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
    NSError *error = nil;
    
    //实例化捕获输入对象
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    
    if (!input) {
        NSLog(@"%@",error);
    }
    
    //加入捕获会话中
    [session addInput:input];
    
    //实例化静态图像输出对象
    AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc]init];
    
    //设置输出参数
    NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey ,nil];
    
    stillImageOutput.outputSettings = dict;
    
    [session addOutput:stillImageOutput];
    
    [session startRunning];
    
    // 创建执行动画的Image View对象
    UIImageView* imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
    
    
    NSMutableArray *array1 = [[NSMutableArray alloc] init];
    NSMutableArray *array2 = [[NSMutableArray alloc] init];
    
    for (int i =10; i <= 40; i++) {
        NSString *fileName1 = [[NSString alloc] initWithFormat:@"100%i.png",i];
        [array1 addObject:[UIImage imageNamed:fileName1]];
        
        NSString *fileName2 = [[NSString alloc] initWithFormat:@"100%i.png",(50-i)];
        [array2 addObject:[UIImage imageNamed:fileName2]];
    }
    
    [array1 addObjectsFromArray:array2];
    
    
    imageView.animationImages = array1;
    
    imageView.animationDuration = 1.75;
    imageView.animationRepeatCount = 0;
    
    // start animating
    [imageView startAnimating];
    [self.view addSubview:imageView];

更多干货,请支持原作:http://item.jd.com/11436547.html






你可能感兴趣的:(ios,读书笔记,照相机,摄像头)