用GPUImage给视频添加多个滤镜

http://www.voidcn.com/blog/u1031/article/p-4178831.html

之前说过要写的博客。。关于使用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个输入源的话)

这里给出简单代码:

 <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//输入的数据(image)</span>
    <span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> *img = [<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> imageNamed:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"secPersonDemo.png"</span>];
    _pic = [[GPUImagePicture alloc] initWithImage:img];
    
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//经过的渠道(filter)</span>
    _brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [_brightnessFilter setBrightness:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0</span>];
    
    _contrastFilter = [[GPUImageContrastFilter alloc] init];
    [_contrastFilter setContrast:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1.0</span>];
    
    _rgbFilter = [[GPUImageToneCurveFilter alloc] init];
    
    _blurFilter = [[GPUImageiOSBlurFilter alloc] init];
    [_blurFilter setBlurRadiusInPixels:-<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">12.0</span>f];
    
    _vignetteFilter = [[GPUImageVignetteFilter alloc] init];
    
    _bilateralFilter = [[GPUImageBilateralFilter alloc] init];
    [_bilateralFilter setFirstDistanceNormalizationFactorUniform:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">15</span>];
    [_bilateralFilter setSecondDistanceNormalizationFactorUniform:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">25</span>];
    
    _rgbOpeningFilter = [[GPUImageRGBOpeningFilter alloc] initWithRadius:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0.2</span>];
    
    _saturationFilter = [[GPUImageSaturationFilter alloc] init];
    
    _softLightBlendFilter = [[GPUImageSoftLightBlendFilter alloc] init];
    
    _pict = [[GPUImagePicture alloc] initWithImage:[<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">UIImage</span> imageNamed:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"blend.png"</span>]];
    
    
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//设置连接(target)</span>
    [_pic addTarget:_rgbFilter];
    [_rgbFilter addTarget:_contrastFilter];
    [_contrastFilter addTarget:_brightnessFilter];
    [_brightnessFilter addTarget:_bilateralFilter];
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_blurFilter addTarget:_vignetteFilter];</span>
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_vignetteFilter addTarget:_imageview];</span>
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_vignetteFilter addTarget:_bilateralFilter];</span>
    [_bilateralFilter addTarget:_rgbOpeningFilter];
    [_rgbOpeningFilter addTarget:_saturationFilter];
    <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[_saturationFilter addTarget:_imageview];</span>
    
    [_saturationFilter addTarget:_softLightBlendFilter];
    [_pict addTarget:_softLightBlendFilter];
    
    [_softLightBlendFilter addTarget:_imageview];<span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//_imageview是一个GPUImageView,用来显示结果的</span>
    
    [_pict processImage];
    [_pic processImage];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值