天天看点

GPUImage之视频流滤镜

源码在最后,附带滤镜下载地址

GPUImageVideoCamera使用教程,手把手教你怎么做滤镜

本文将介绍10种滤镜效果包含

case :
            //棕褐色过滤器
            [self FSKSepiaFilter];
            break;
        case :
            //单色过滤器
            [self FSKMonochromeFilter];

            break;
        case :
            //灰度过滤器
            [self FSKGrayscaleFilter];

            break;
        case :
            //滤色过滤器
            [self FSKColorInvertFilter];

            break;
        case :
            //查询过滤器
            [self FSKLookupFilter];

            break;
        case :
            //高亮投影过滤器
            [self FSKHighlightShadowFilter];

            break;
        case :
            //彩色矩阵过滤器

            [self FSKMatrixFilter];

            break;
        case :
            //曝光度
            [self FSKExposureFilter];

            break;
        case :
            //伽马线
            [self FSKGammaFilter];

            break;
        case :
            //美颜滤镜

            [self FSKBeautifyFilter];

            break;
           

效果图:

美女来自网上,希望没有侵犯版权

GPUImage之视频流滤镜

实现步骤如下:

  1. 下载GPUImage库链接上篇文章提供,请前往
  2. 如图在使用的地方-添加头文件#import “GPUImage.h”
    GPUImage之视频流滤镜

    注意不要害怕Swift文件,本文尚未用到,关于oc调用swift请看这里,后续补充

    3.设置全局的camera对象,以及全局的显示view

@property (nonatomic, strong) GPUImageVideoCamera *videoCamera;
//屏幕上显示的View
@property (nonatomic, strong) GPUImageView *filterView;
           

4.初始化相机,设置相机的输出分辨率,捕获画面摄像头的位置,以及显示时的方向。

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化相机,设置相机的输出分辨率,捕获画面摄像头的位置
    self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    //以及显示时的方向
    self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    }
           

5.初始化显示view。设置为全屏铺满。

//初始化显示view
self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
//设置为全屏铺满。
self.filterView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
self.filterView.center = self.view.center;
           

6.开始捕获画面,开始显示

[self.view addSubview:self.filterView]; [self.videoCamera startCameraCapture];
[self.videoCamera addTarget:self.filterView];
           

7.添加滤镜,这个滤镜比较明显

//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}
           

[self.videoCamera removeAllTargets];这句话非常重要,是为了移除之前的滤镜效果,以免重复添加

美颜滤镜

滤镜下载,地址,http://download.csdn.net/detail/xoxo_x/9646726

关于滤镜的介绍请点击这里,包括了滤镜的实现过程

//美颜滤镜
- (void)FSKBeautifyFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    [self.videoCamera addTarget:beautifyFilter];
    [beautifyFilter addTarget:self.filterView];
}
           

其他滤镜

//棕褐色过滤器
- (void)FSKSepiaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
    sepiaFilter.intensity = ;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = ;
    monochromeFilter.color = (GPUVector4){
        f, f, f, f
    };
    [monochromeFilter setColorRed: green: blue:];
    [self.videoCamera addTarget:monochromeFilter];
    [monochromeFilter addTarget:self.filterView];
}
//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}
//滤色过滤器
- (void)FSKColorInvertFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorInvertFilter *colorInvertFilter = [[GPUImageColorInvertFilter alloc]init];
    [self.videoCamera addTarget:colorInvertFilter];
    [colorInvertFilter addTarget:self.filterView];
}
//查询过滤器
- (void)FSKLookupFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc]init];
    lookupFilter.intensity = ;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = ;
    highlightShadowFilter.highlights = ;
    [self.videoCamera addTarget:highlightShadowFilter];
    [highlightShadowFilter addTarget:self.filterView];
}
//柔化过滤器
- (void)FSKSoftEleganceFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSoftEleganceFilter *softEleganceFilter = [[GPUImageSoftEleganceFilter alloc]init];
    [self.videoCamera addTarget:softEleganceFilter];
    [softEleganceFilter addTarget:self.filterView];
}
//彩色矩阵过滤器
- (void)FSKMatrixFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorMatrixFilter *matrixFilter = [[GPUImageColorMatrixFilter alloc]init];
    matrixFilter.colorMatrix = (GPUMatrix4x4){
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f}
    };
    matrixFilter.intensity = ;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = ;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽马线
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = ;
    [self.videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:self.filterView];

}
           

工程所有代码:仅供参考:

//
//  ViewController.m
//  GPUText
//
//  Created by fsk-0-1-n on 16/9/27.
//  Copyright © 2016年 Xoxo. All rights reserved.
//

#import "FSKMainViewController.h"
#import "GPUImage.h"
#import "GPUImageBeautifyFilter.h"


@interface FSKMainViewController ()
@property (nonatomic, strong) GPUImageVideoCamera *videoCamera;
//屏幕上显示的View
@property (nonatomic, strong) GPUImageView *filterView;


@end

@implementation FSKMainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    self.videoCamera.horizontallyMirrorFrontFacingCamera = YES;
    self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
    self.filterView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    self.filterView.center = self.view.center;
    [self.view addSubview:self.filterView];
    [self.videoCamera startCameraCapture];
    [self.videoCamera addTarget:self.filterView];

    UIButton *bt = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width/-, self.view.frame.size.height-, , )];
    [bt setBackgroundImage:[UIImage imageNamed:@"ShotCamera"] forState:UIControlStateNormal];
    [self.view addSubview:bt];
    bt.tag = ;
    [bt addTarget:self action:@selector(changeFilter:) forControlEvents:UIControlEventTouchUpInside];

//    [self arcRandomFilter:(arc4random()%11)];

}
- (void)changeFilter:(UIButton *)bt
{

    [self arcRandomFilter:(int)(bt.tag)];
    bt.tag++;
    if (bt.tag>) {
        bt.tag=;
    }
}
- (void)arcRandomFilter:(int)caseIndex
{
    switch (caseIndex) {
        case :
            //棕褐色过滤器
            [self FSKSepiaFilter];
            break;
        case :
            //单色过滤器
            [self FSKMonochromeFilter];

            break;
        case :
            //灰度过滤器
            [self FSKGrayscaleFilter];

            break;
        case :
            //滤色过滤器
            [self FSKColorInvertFilter];

            break;
        case :
            //查询过滤器
            [self FSKLookupFilter];

            break;
        case :
            //高亮投影过滤器
            [self FSKHighlightShadowFilter];

            break;
        case :
            //彩色矩阵过滤器

            [self FSKMatrixFilter];

            break;
        case :
            //曝光度
            [self FSKExposureFilter];

            break;
        case :
            //伽马线
            [self FSKGammaFilter];

            break;
        case :
            //美颜滤镜

            [self FSKBeautifyFilter];

            break;
        default:
            break;
    }
}

//棕褐色过滤器
- (void)FSKSepiaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
    sepiaFilter.intensity = ;
    [self.videoCamera addTarget:sepiaFilter];
    [sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
    monochromeFilter.intensity = ;
    monochromeFilter.color = (GPUVector4){
        f, f, f, f
    };
    [monochromeFilter setColorRed: green: blue:];
    [self.videoCamera addTarget:monochromeFilter];
    [monochromeFilter addTarget:self.filterView];
}
//灰度过滤器
- (void)FSKGrayscaleFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc]init];
    [self.videoCamera addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:self.filterView];
}
//滤色过滤器
- (void)FSKColorInvertFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorInvertFilter *colorInvertFilter = [[GPUImageColorInvertFilter alloc]init];
    [self.videoCamera addTarget:colorInvertFilter];
    [colorInvertFilter addTarget:self.filterView];
}
//查询过滤器
- (void)FSKLookupFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc]init];
    lookupFilter.intensity = ;
    [self.videoCamera addTarget:lookupFilter];
    [lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
    highlightShadowFilter.shadows = ;
    highlightShadowFilter.highlights = ;
    [self.videoCamera addTarget:highlightShadowFilter];
    [highlightShadowFilter addTarget:self.filterView];
}
//柔化过滤器
- (void)FSKSoftEleganceFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageSoftEleganceFilter *softEleganceFilter = [[GPUImageSoftEleganceFilter alloc]init];
    [self.videoCamera addTarget:softEleganceFilter];
    [softEleganceFilter addTarget:self.filterView];
}
//彩色矩阵过滤器
- (void)FSKMatrixFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageColorMatrixFilter *matrixFilter = [[GPUImageColorMatrixFilter alloc]init];
    matrixFilter.colorMatrix = (GPUMatrix4x4){
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f},
        {f, f, f, f}
    };
    matrixFilter.intensity = ;
    [self.videoCamera addTarget:matrixFilter];
    [matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
    exposureFilte.exposure = ;
    [self.videoCamera addTarget:exposureFilte];
    [exposureFilte addTarget:self.filterView];
}

//伽马线
- (void)FSKGammaFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
    gammaFilter.gamma = ;
    [self.videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:self.filterView];

}
//美颜滤镜
- (void)FSKBeautifyFilter
{
    [self.videoCamera removeAllTargets];
    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    [self.videoCamera addTarget:beautifyFilter];
    [beautifyFilter addTarget:self.filterView];
}

@end