iOS音视频(直播 音频 视频)iOS开发零散知识程序员

iOS开发之GPUImage(一)—初探(给相机加滤镜)

2017-03-24  本文已影响2425人  绿豆粥与茶叶蛋

前言

本文为作者iOS开发之GPUImage系列的第一篇,由于作者项目中即将涉及到直播加滤镜,美颜等功能,所以拿来github上很火的一个滤镜框架GPUImage学习一下。本篇文章介绍的Demo使用cocopods引入了GPUImage框架,你也可以手动拖入,同时引入了简友琨君自定义的美颜滤镜。作为学习的开始,本片只涉及到为摄像头加单滤镜,由浅入深,循序渐进。

正文

本文主要介绍,如何为相机加滤镜,以及加滤镜后获取图片储存在自己的相册中。Demo的效果图如下:

图1-1 边缘检测滤镜与哈哈镜滤镜.png

简单的总结相机加滤镜分为以下几个步骤:

注:现在iOS访问用户的相机和相册都要事先在info.plist文件中提前布置请求权限。是否允许访问相册:Privacy - Photo Library Usage Description;是否允许访问相机:Privacy - Camera Usage Description。

废话少说,以哈哈镜滤镜为例,直接上代码:

步骤一:初始化相机,第一个参数表示相册的尺寸,第二个参数表示前后摄像头

self.myCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionFront];
//竖屏方向
self.myCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

步骤二:初始化哈哈镜滤镜

GPUImageStretchDistortionFilter *stretchDistortionFilter = [[GPUImageStretchDistortionFilter alloc] init];

步骤三:初始化GPUImageView

self.myGPUImageView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenW, ScreenH)];

步骤四:将初始化过的相机加到目标滤镜上

[self.myCamera addTarget:stretchDistortionFilter];

步骤五:将滤镜加在目标GPUImage上

[stretchDistortionFilter addTarget:self.myGPUImageView];

步骤六:GPUImage加在控制器视图上

[self.view addSubview:self.myGPUImageView];

步骤七:相机开始捕捉画面

[self.myCamera startCameraCapture];

步骤八:将相机捕捉的画面存在手机的相册中

//定格一张图片 保存到相册
[self.myCamera capturePhotoAsPNGProcessedUpToFilter:self.myFilter withCompletionHandler:^(NSData *processedPNG, NSError *error) {
        
    //拿到相册,需要引入Photo Kit
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        //写入图片到相册
        PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:[UIImage imageWithData:processedPNG]];
    } completionHandler:^(BOOL success, NSError * _Nullable error) { 
        NSLog(@"success = %d, error = %@", success, error);
    }];   
}];

源码已上传至fenglinyunshi-git,欢迎下载,并提出宝贵意见。

结语

本片Demo只涉及到为摄像头加单滤镜的情况,下一篇将会介绍混合滤镜的做法,Demo总共用到了八种不同的滤镜,以及对各个滤镜属性值做了相应的设定。有兴趣的朋友可以在上面的git链接中下载Demo查看。
未完待续...

读书不觉已春深,一寸光阴一寸金。

上一篇下一篇

猜你喜欢

热点阅读