源碼在最後,附帶濾鏡下載下傳位址
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