源码在最后,附带滤镜下载地址
GPUImageVideoCamera使用教程,手把手教你怎么做滤镜
本文将介绍10种滤镜效果包含
case 0:
//棕褐色过滤器
[self FSKSepiaFilter];
break;
case 1:
//单色过滤器
[self FSKMonochromeFilter];
break;
case 2:
//灰度过滤器
[self FSKGrayscaleFilter];
break;
case 3:
//滤色过滤器
[self FSKColorInvertFilter];
break;
case 4:
//查询过滤器
[self FSKLookupFilter];
break;
case 5:
//高亮投影过滤器
[self FSKHighlightShadowFilter];
break;
case 6:
//彩色矩阵过滤器
[self FSKMatrixFilter];
break;
case 7:
//曝光度
[self FSKExposureFilter];
break;
case 8:
//伽马线
[self FSKGammaFilter];
break;
case 9:
//美颜滤镜
[self FSKBeautifyFilter];
break;
效果图:
美女来自网上,希望没有侵犯版权
实现步骤如下:
下载GPUImage库链接上篇文章提供,请前往
如图在使用的地方-添加头文件#import “GPUImage.h”
注意不要害怕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 = 0.4;
[self.videoCamera addTarget:sepiaFilter];
[sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
[self.videoCamera removeAllTargets];
GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
monochromeFilter.intensity = 0.4;
monochromeFilter.color = (GPUVector4){
1.f, 0.f, 1.f, 0.f
};
[monochromeFilter setColorRed:0.3 green:0.4 blue:0.5];
[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 = 0.4;
[self.videoCamera addTarget:lookupFilter];
[lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
[self.videoCamera removeAllTargets];
GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
highlightShadowFilter.shadows = 0.4;
highlightShadowFilter.highlights = 0.4;
[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){
{1.f, 0.f, 1.f, 0.f},
{0.f, 1.f, 0.f, 0.f},
{0.f, 0.f, 1.f, 0.f},
{0.f, 1.f, 0.f, 1.f}
};
matrixFilter.intensity = 0.5;
[self.videoCamera addTarget:matrixFilter];
[matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
[self.videoCamera removeAllTargets];
GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
exposureFilte.exposure = 0.3;
[self.videoCamera addTarget:exposureFilte];
[exposureFilte addTarget:self.filterView];
}
//伽马线
- (void)FSKGammaFilter
{
[self.videoCamera removeAllTargets];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
gammaFilter.gamma = 0.2;
[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/2-25, self.view.frame.size.height-50, 50, 50)];
[bt setBackgroundImage:[UIImage imageNamed:@"ShotCamera"] forState:UIControlStateNormal];
[self.view addSubview:bt];
bt.tag = 0;
[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>9) {
bt.tag=0;
}
}
- (void)arcRandomFilter:(int)caseIndex
{
switch (caseIndex) {
case 0:
//棕褐色过滤器
[self FSKSepiaFilter];
break;
case 1:
//单色过滤器
[self FSKMonochromeFilter];
break;
case 2:
//灰度过滤器
[self FSKGrayscaleFilter];
break;
case 3:
//滤色过滤器
[self FSKColorInvertFilter];
break;
case 4:
//查询过滤器
[self FSKLookupFilter];
break;
case 5:
//高亮投影过滤器
[self FSKHighlightShadowFilter];
break;
case 6:
//彩色矩阵过滤器
[self FSKMatrixFilter];
break;
case 7:
//曝光度
[self FSKExposureFilter];
break;
case 8:
//伽马线
[self FSKGammaFilter];
break;
case 9:
//美颜滤镜
[self FSKBeautifyFilter];
break;
default:
break;
}
}
//棕褐色过滤器
- (void)FSKSepiaFilter
{
[self.videoCamera removeAllTargets];
GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
sepiaFilter.intensity = 0.4;
[self.videoCamera addTarget:sepiaFilter];
[sepiaFilter addTarget:self.filterView];
}
//单色过滤器
- (void)FSKMonochromeFilter
{
[self.videoCamera removeAllTargets];
GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc]init];
monochromeFilter.intensity = 0.4;
monochromeFilter.color = (GPUVector4){
1.f, 0.f, 1.f, 0.f
};
[monochromeFilter setColorRed:0.3 green:0.4 blue:0.5];
[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 = 0.4;
[self.videoCamera addTarget:lookupFilter];
[lookupFilter addTarget:self.filterView];
}
//高亮投影过滤器
- (void)FSKHighlightShadowFilter
{
[self.videoCamera removeAllTargets];
GPUImageHighlightShadowFilter *highlightShadowFilter = [[GPUImageHighlightShadowFilter alloc]init];
highlightShadowFilter.shadows = 0.4;
highlightShadowFilter.highlights = 0.4;
[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){
{1.f, 0.f, 1.f, 0.f},
{0.f, 1.f, 0.f, 0.f},
{0.f, 0.f, 1.f, 0.f},
{0.f, 1.f, 0.f, 1.f}
};
matrixFilter.intensity = 0.5;
[self.videoCamera addTarget:matrixFilter];
[matrixFilter addTarget:self.filterView];
}
//曝光度
- (void)FSKExposureFilter
{
[self.videoCamera removeAllTargets];
GPUImageExposureFilter *exposureFilte = [[GPUImageExposureFilter alloc]init];
exposureFilte.exposure = 0.3;
[self.videoCamera addTarget:exposureFilte];
[exposureFilte addTarget:self.filterView];
}
//伽马线
- (void)FSKGammaFilter
{
[self.videoCamera removeAllTargets];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc]init];
gammaFilter.gamma = 0.2;
[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