之前说过要写的博客。。关于使用GPUImage来做混合滤镜和水印等效果;
放了国庆假期之后。。终于想起来要填坑了。。。。于是现在来简单说一下GPUImage做混合滤镜的做法;
其实做混合滤镜,GPUImage一共有2种做法:一是使用GPUImageFilterGroup, 二是用多个GPUImageFilter来叠合;
这里先讲第一种: GPUImageFilterGroup
GPUImageFilterGroup包括上面几个属性和方法;
其中initialFilters指的是数据源的传入Filter(比如GPUImageUIElement的target,GPUImagePicture的target等)
terminalFilter指的是最后的Filter,它的target就是数据的输出口;
具体可以看GPUImage的官方例子:FilterShowcase
第二种方法:
1. 最简单的Filter是这样用的:
2. 如果做滤镜的叠合,其实就是多个Filter串联在一起:
3. 如果这些滤镜中,要做混合效果(强光混合之类的,就是需要2个输入源的话)
这里给出简单代码:
//输入的数据(image)
UIImage *img = [UIImage imageNamed:@"secPersonDemo.png"];
_pic = [[GPUImagePicture alloc] initWithImage:img];
//经过的渠道(filter)
_brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
[_brightnessFilter setBrightness:0];
_contrastFilter = [[GPUImageContrastFilter alloc] init];
[_contrastFilter setContrast:1.0];
_rgbFilter = [[GPUImageToneCurveFilter alloc] init];
_blurFilter = [[GPUImageiOSBlurFilter alloc] init];
[_blurFilter setBlurRadiusInPixels:-12.0f];
_vignetteFilter = [[GPUImageVignetteFilter alloc] init];
_bilateralFilter = [[GPUImageBilateralFilter alloc] init];
[_bilateralFilter setFirstDistanceNormalizationFactorUniform:15];
[_bilateralFilter setSecondDistanceNormalizationFactorUniform:25];
_rgbOpeningFilter = [[GPUImageRGBOpeningFilter alloc] initWithRadius:0.2];
_saturationFilter = [[GPUImageSaturationFilter alloc] init];
_softLightBlendFilter = [[GPUImageSoftLightBlendFilter alloc] init];
_pict = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"blend.png"]];
//设置连接(target)
[_pic addTarget:_rgbFilter];
[_rgbFilter addTarget:_contrastFilter];
[_contrastFilter addTarget:_brightnessFilter];
[_brightnessFilter addTarget:_bilateralFilter];
//[_blurFilter addTarget:_vignetteFilter];
//[_vignetteFilter addTarget:_imageview];
//[_vignetteFilter addTarget:_bilateralFilter];
[_bilateralFilter addTarget:_rgbOpeningFilter];
[_rgbOpeningFilter addTarget:_saturationFilter];
//[_saturationFilter addTarget:_imageview];
[_saturationFilter addTarget:_softLightBlendFilter];
[_pict addTarget:_softLightBlendFilter];
[_softLightBlendFilter addTarget:_imageview];//_imageview是一个GPUImageView,用来显示结果的
[_pict processImage];
[_pic processImage];