一、前言
由于不会使用OpenGL ES和Mental,作为iOS开发者,不妨学习一下GPUImage的使用,GPUImage提供了120多种滤镜的效果,可以自己替换。作为入门选手,是不二选择。GPUImage的github地址:github.com/BradLarson/…。
二、使用测试
2.1创建一个高亮度的滤镜
- (UIImage *)AdjustImgBright: (CGFloat)bright{
//创建一个高亮度的滤镜
GPUImageBrightnessFilter *brightFilter = [[GPUImageBrightnessFilter alloc]init];
brightFilter.brightness = bright;
//设置要渲染的区域
[brightFilter forceProcessingAtSize:self.editImage.size];
[brightFilter useNextFrameForImageCapture];
//获取数据源
GPUImagePicture *imageSource = [[GPUImagePicture alloc]initWithImage:self.adjustImage];
//添加滤镜
[imageSource addTarget: brightFilter];
//开始渲染
[imageSource processImage];
//获取渲染后的图片
UIImage *newImage = [brightFilter imageFromCurrentFramebuffer];
return newImage;
}
2.2 给相机添加滤镜
初始化相机;
初始化滤镜;
初始化GPUImageView;
将初始化过的相机加到目标滤镜上;
将滤镜加在目标GPUImage上;
GPUImage加在控制器视图上;
相机开始捕捉画面;
将相机捕捉的画面存在手机的相册中
#paragma 初始化相机
self._camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionFront];
//竖屏方向
self._camera.outputImageOrientation = UIInterfaceOrientationPortrait;
//这里测试一下哈哈镜滤镜GPUImageStretchDistortionFilter *hahaFilter = [[GPUImageStretchDistortionFilter alloc] init];
//初始化GPUImageView,并设置frame
self._GPUImageView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
//将初始化过的相机加到目标滤镜上
[self._camera addTarget: hahaFilter];
//将滤镜加在目标GPUImage上
[self.view addSubview:self._GPUImageView];
//相机开始捕捉画面
[self._camera startCameraCapture]; //将相机捕捉的画面存在手机的相册中
//定格一张图片 保存到相册[self._camera capturePhotoAsPNGProcessedUpToFilter:self.hahaFilter 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);
}];
}];
三、结语
GPUImage的使用这里只是初步学习别人的代码,欢迎iOS开发的同志们一起学习!开发了两年多,内心已经对纯粹的页面逻辑处理出现了抵触的情绪,想要在特殊的领域去探索一下,本文也是在看了音视频开发视频需要用到的知识之后学习了一下,后面还要继续努力!