源码在最后,附带滤镜下载地址
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库链接上篇文章提供,请前往
- 如图在使用的地方-添加头文件#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