常看IOS技术iOS_图片相关

iOS:自定义相机[获取指定区域的指定图片]

2016-09-06  本文已影响5479人  琪一可

需求:相机给定一个相框, 让用户将身份证放在相框所在区域, 之后拍照出来的照片就是这个身份证的照片。 支持前后镜头。 (ps:虽然不知道经理为什么要这个转换镜头的需求..) 能够直接存入相册。

示意图.png

上面这个图片是我自己画的, 主要是看功能, 不必在意界面, demo中的界面类似, 但不是一致的。

1

这里注意的是在存入相册时候, 不再使用<AssetsLibrary/AssetsLibrary.h>而是<Photos/Photos.h>, 前者已经废弃了。

- (void)writeToSavedPhotos
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
        NSLog(@"无权限访问相册");
        return;
    }
    
    // 首先判断权限
    if ([self haveAlbumAuthority]) {
        //写入相册
        //这里的selector只能写这个方法
        UIImageWriteToSavedPhotosAlbum(self.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);
        
    }
}

判断权限

- (BOOL)haveAlbumAuthority
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    
    if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
        return NO;
    }
    return YES;
    
}

2

为了剪裁效果准确, 这里的类型使用AVLayerVideoGravityResize, demo里面使用的是别的类型, 记得修改哦。ps:评论区有伙伴说这个属性不是按比例的,预览视图会变形的。那么大家可以试试,用用其它属性哈。谢谢大家的指正。

  // 初始化预览层
    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
    
    [self.previewLayer setVideoGravity:AVLayerVideoGravityResize];
    self.previewLayer.frame = self.bounds;
    [self.layer addSublayer:self.previewLayer];

本demo也借鉴了一些博客的内容, 具体我也没记, 总之谢谢大家的共享, 我又根据自己的需求写了个demo, 希望能帮助到别人。

demo

上一篇下一篇

猜你喜欢

热点阅读