iOS:自定义相机[获取指定区域的指定图片]
2016-09-06 本文已影响5479人
琪一可
示意图.png需求:相机给定一个相框, 让用户将身份证放在相框所在区域, 之后拍照出来的照片就是这个身份证的照片。 支持前后镜头。 (ps:虽然不知道经理为什么要这个转换镜头的需求..) 能够直接存入相册。
上面这个图片是我自己画的, 主要是看功能, 不必在意界面, 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, 希望能帮助到别人。