GPUImage 是基于 GPU 处理图像的一个开源库, 提供了各种图像处理滤镜,例如调 亮度/饱和度/曝光度/白平衡/锐化等滤镜.
并且支持照相机/摄像机 的实时滤镜.
GPUImage采用链式方式来处理画面,通过addTarget:方法为链条添加每个环节的对象,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链.
https://github.com/BradLarson/GPUImage
图片滤镜
//调整图像的对比度 - (void)changeContrast{ //对比度 // GPUImageContrastFilter *filter = [[GPUImageContrastFilter alloc]init]; // filter.contrast = self.slider.value; //饱和度 // GPUImageSaturationFilter *filter = [[GPUImageSaturationFilter alloc]init]; // filter.saturation = self.slider.value; //曝光度 // GPUImageExposureFilter *filter = [[GPUImageExposureFilter alloc] init]; // filter.exposure = self.slider.value; //色温(白平衡) GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init]; filter.temperature = self.slider.value; filter.tint = 0.0; //设置要渲染的区域 [filter forceProcessingAtSize:_image.size]; //获取 GPU 图片 GPUImagePicture *pic = [[GPUImagePicture alloc]initWithImage:_image]; //添加滤镜 [pic addTarget:filter]; //开始渲染 [pic processImage]; //(需要调用一下? why?) [filter useNextFrameForImageCapture]; //获取渲染后的图片 UIImage *newImage = [filter imageFromCurrentFramebuffer]; self.imageView.image = newImage; }
实时相机滤镜
//创建相机(注意:当前vc需持有camera, 否则会提前释放) camera = [[GPUImageVideoCamera alloc]initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront]; camera.outputImageOrientation = UIInterfaceOrientationPortrait; //创建最终预览视图 view GPUImageView *cameraView = [[GPUImageView alloc]initWithFrame:self.view.frame]; [self.view insertSubview:cameraView atIndex:0]; //创建滤镜组合: 磨皮,美白 GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init]; //磨皮滤镜 GPUImageBilateralFilter *bilateralFilter = [[GPUImageBilateralFilter alloc]init]; [groupFilter addTarget:bilateralFilter]; //美白滤镜 GPUImageBrightnessFilter *brightFilter = [[GPUImageBrightnessFilter alloc]init]; [groupFilter addTarget:brightFilter]; //设置滤镜组链 [bilateralFilter addTarget:brightFilter]; [groupFilter setInitialFilters:@[bilateralFilter]]; groupFilter.terminalFilter = brightFilter; //设置 GPUImage 处理链,从数据源->滤镜->最终页面效果 [camera addTarget:groupFilter]; [groupFilter addTarget:cameraView]; //相机开始捕获 [camera startCameraCapture];
参考:
//滤镜效果
http://blog.csdn.net/gaojq_ios/article/details/46926559
//实时滤镜(相机)
https://www.jianshu.com/p/b1d3ef7fdf7a
https://www.jianshu.com/p/2ce9b63ecfef
http://blog.csdn.net/xoxo_x/article/details/58357978
博客:(总结)
http://blog.csdn.net/xoxo_x/article/details/52695032
GPUImage 原理
http://blog.csdn.net/qq_29846663/article/details/53707482
GPUImage所有滤镜介绍
http://www.360doc.com/content/15/0907/10/19175681_497418716.shtml