本篇主要教学直播中国和美利坚联邦合众国颜效能的落实原理,GPUImage原生美颜

前言

在看那篇从前,若是您还不精晓直播原理,请查看那篇文章如何急忙的费用一个全部的iOS直播app(原理篇)

支出一款直播app,美颜功用是很要紧的,假设没有美颜功效,可能分分钟钟掉粉千万,本篇主要教师直播中美颜功能的实现原理,并且完结美颜功能。

万一喜欢我的篇章,可以关心我天涯论坛:袁峥Seemygo

GPUImage

  • GPUImage:是一个依照OpenGL ES
    2.0图像和视频拍卖的开源iOS框架,提供各样各种的图像处理滤镜,并且支持照相机和视频机的实时滤镜,内置120四种滤镜效果,并且可以自定义图像滤镜。
    滤镜处理的法则:就是把静态图片或者摄像的每一帧举办图纸变换再展现出来。它的精神就是像素点的坐标和颜料变化

在看这篇往日,如果您还不打听直播原理,请查看那篇文章如何快速的支出一个完好无损的iOS直播app(原理篇)

运用GPUImage处理直播进程中国和美利坚合众国颜的流程

  • 收集视频 => 获取每一帧图片 => 滤镜处理 => GPUImageView呈现

美颜原理.png

GPUImage处理画面原理

  • GPUImage采取链式格局来拍卖画面,通过addTarget:方法为链条添加每个环节的目的,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链。
    • 诚如的target可分为两类
      • 中间环节的target, 一般是种种filter,
        是GPUImageFilter或者是子类.
      • 终极环节的target, GPUImageView:用于体现到显示屏上,
        或者GPUImageMovieWriter:写成视频文件。
  • GPUImage处理主要分为3个环节
    • source(视频、图片源) -> filter(滤镜) -> final target
      (处理后视频、图片)
    • GPUImaged的Source:都三番三回GPUImageOutput的子类,作为GPUImage的数据源,就好比外面的光华,作为眼睛的输出源
    • GPUImageVideoCamera:用于实时拍摄视频
    • GPUImageStillCamera:用于实时拍摄照片
    • GPUImagePicture:用于拍卖已经拍照好的图样,比如png,jpg图片
    • GPUImageMovie:用于拍卖已经拍照好的摄像,比如mp3文件
  • GPUImage的filter:GPUimageFilter类或者子类,那一个类继承自
    GPUImageOutput,并且遵从GPUImageInput协议,那样既能流进,又能流出,就好比大家的墨镜,光线通过墨镜的处理,最后进入我们肉眼
  • GPUImage的final
    target:GPUImageView,GPUImageMovieWriter就好比大家肉眼,最后输入指标。

支出一款直播app,美颜成效是很重点的,假若没有美颜功效,可能分分钟钟掉粉千万,本篇主要讲解直播中美颜功用的落成原理,并且落成美颜成效。

美颜基本概念

GPU:(Graphic Processor
Unit图形处理单元)手机依然电脑用于图像处理和渲染的硬件

GPU工作原理:采集数据-> 存入主内存(RAM) -> CPU(统计处理) ->
存入显存(VRAM) -> GPU(完毕图像渲染) -> 帧缓冲区 -> 屏幕

GPU工作原理.jpg

OpenGL ES:(Open Graphics Library For Embedded(嵌入的) Systems
开源嵌入式系统图形处理框架),一套图形与硬件接口,用于把拍卖好的图形浮现到显示器上。

GPUImage:是一个根据OpenGL ES
2.0图像和视频拍卖的开源iOS框架,提供种种种种的图像处理滤镜,并且帮助照相机和摄像机的实时滤镜,内置120多样滤镜效果,并且可以自定义图像滤镜。

滤镜处理的原理:就是把静态图片或者摄像的每一帧进行图片变换再突显出来。它的本色就是像素点的坐标和颜料变化

美颜原理

  • 磨皮(GPUImageBilateralFilter):本质就是让像素点模糊,能够应用高斯模糊,可是也许导致边缘会不清楚,用两者滤波(Bilateral
    Filter) ,有针对性的模糊像素点,能担保边缘不被模糊。
  • 美白(GPUImageBrightnessFilter):本质就是增强亮度。

比方喜欢我的文章,可以关心本身和讯:袁峥Seemygo,也可以来小码哥,通晓下大家的iOS培训课程。后续还会更新更加多内容,有其余难题,欢迎简书留言袁峥Seemygo

GPUImage处理画面原理

  • GPUImage接纳链式方式来处理画面,通过addTarget:方法为链条添加每个环节的对象,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链。
    • 譬如说:墨镜原理,从外界传来光线,会经过墨镜过滤,在传给我们的眼睛,就能感受到大白天也是乌黑一片,哈哈
    • 貌似的target可分为两类
      • 中间环节的target, 一般是种种filter,
        是GPUImageFilter或者是子类.
      • 最终环节的target, GPUImageView:用于呈现到显示器上,
        或者GPUImageMovieWriter:写成摄像文件。
  • GPUImage处理主要分为3个环节
    • source(视频、图片源) -> filter(滤镜) -> final target (处理后视频、图片)
    • GPUImaged的Source:都持续GPUImageOutput的子类,作为GPUImage的数据源,就好比外面的光明,作为眼睛的输出源
      • GPUImageVideoCamera:用于实时拍摄视频
      • GPUImageStillCamera:用于实时拍摄照片
      • GPUImagePicture:用于拍卖已经拍照好的图片,比如png,jpg图片
      • GPUImageMovie:用于拍卖已经拍照好的视频,比如VCD文件
    • GPUImage的filter:GPUimageFilter类或者子类,那些类继承自GPUImageOutput,并且遵从GPUImageInput协议,那样既能流进,又能流出,就好比我们的墨镜,光线通过墨镜的拍卖,最终进入大家肉眼
    • GPUImage的final target:GPUImageView,GPUImageMovieWriter就好比大家肉眼,最终输入目的。

GPUImage处理原理.png

GPUImage实战

应用GPUImage处理直播进度中国和美国颜的流水线

美颜原理

  • 磨皮(GPUImageBilateralFilter):本质就是让像素点模糊,可以接纳高斯模糊,然而也许导致边缘会不明晰,用两者滤波(Bilateral
    Filter) ,有针对性的歪曲像素点,能担保边缘不被颠倒是非。
  • 美白(GPUImageBrightnessFilter):本质就是增强亮度。

GPUImage原生美颜

  • 步骤一:使用Cocoapods导入GPUImage

  • 步骤二:创制视频源GPUImageVideoCamera

  • 手续三:创建最后目的源:GPUImageView

  • 手续四:创造滤镜组(GPUImageFilterGroup),需求结合亮度(GPUImageBrightnessFilter)和双边滤波(GPUImageBilateralFilter)那八个滤镜达到美颜效果.

  • 手续五:设置滤镜组链

  • 步骤六:设置GPUImage处理链,从数据源 => 滤镜 => 最后界面效果

  • 步骤七:起始收集视频
    注意点:

  • SessionPreset最好利用AVCaptureSessionPresetHigh,会自动识别,假诺用太高分辨率,当前配备不匡助会一向报错

  • GPUImageVideoCamera必需要强引用,否则会被销毁,无法循环不断搜集摄像.
    总得调用startCameraCapture,底层才会把采访到的摄像源,渲染到GPUImageView中,就能突显了。

  • GPUImageBilateralFilter的distanceNormalizationFactor值越小,磨皮效果越-
    好,distance诺玛lizationFactor取值范围: 大于1。

- (void)viewDidLoad {
    [super viewDidLoad];

    // 创建视频源
    // SessionPreset:屏幕分辨率,AVCaptureSessionPresetHigh会自适应高分辨率
    // cameraPosition:摄像头方向
    GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront];
     videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    _videoCamera = videoCamera;

    // 创建最终预览View
    GPUImageView *captureVideoPreview = [[GPUImageView alloc] initWithFrame:self.view.bounds];
    [self.view insertSubview:captureVideoPreview atIndex:0];

    // 创建滤镜:磨皮,美白,组合滤镜
    GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc] init];

    // 磨皮滤镜
    GPUImageBilateralFilter *bilateralFilter = [[GPUImageBilateralFilter alloc] init];
    [groupFilter addTarget:bilateralFilter];
    _bilateralFilter = bilateralFilter;

    // 美白滤镜
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [groupFilter addTarget:brightnessFilter];
    _brightnessFilter = brightnessFilter;

    // 设置滤镜组链
    [bilateralFilter addTarget:brightnessFilter];
    [groupFilter setInitialFilters:@[bilateralFilter]];
    groupFilter.terminalFilter = brightnessFilter;

    // 设置GPUImage响应链,从数据源 => 滤镜 => 最终界面效果
    [videoCamera addTarget:groupFilter];
    [groupFilter addTarget:captureVideoPreview];

    // 必须调用startCameraCapture,底层才会把采集到的视频源,渲染到GPUImageView中,就能显示了。
    // 开始采集视频
    [videoCamera startCameraCapture];
}

- (IBAction)brightnessFilter:(UISlider *)sender {
    _brightnessFilter.brightness = sender.value;
}

- (IBAction)bilateralFilter:(UISlider *)sender {
    // 值越小,磨皮效果越好
    CGFloat maxValue = 10;
    [_bilateralFilter setDistanceNormalizationFactor:(maxValue - sender.value)];
}

征集视频 => 获取每一帧图片 => 滤镜处理 => GPUImageView浮现

美颜功效

  • 关注效果,忽悠本人

应用美颜滤镜完毕

  • 步骤一:使用Cocoapods导入GPUImage

  • 步骤二:导入GPUImageBeautifyFilter文件夹

  • 手续三:成立摄像源GPUImageVideoCamera

  • 手续四:创制最终目标源:GPUImageView

  • 手续五:创设最终美颜滤镜:GPUImageBeautifyFilter

  • 手续六:设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果
    注意:

  • 切换美颜效用原理:移除此前所有处理链,重新设置处理链

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // 创建视频源
    // SessionPreset:屏幕分辨率,AVCaptureSessionPresetHigh会自适应高分辨率
    // cameraPosition:摄像头方向
    GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    _videoCamera = videoCamera;

    // 创建最终预览View
    GPUImageView *captureVideoPreview = [[GPUImageView alloc] initWithFrame:self.view.bounds];
    [self.view insertSubview:captureVideoPreview atIndex:0];
    _captureVideoPreview = captureVideoPreview;

    // 设置处理链
    [_videoCamera addTarget:_captureVideoPreview];

    // 必须调用startCameraCapture,底层才会把采集到的视频源,渲染到GPUImageView中,就能显示了。
    // 开始采集视频
    [videoCamera startCameraCapture];

}

- (IBAction)openBeautifyFilter:(UISwitch *)sender {

    // 切换美颜效果原理:移除之前所有处理链,重新设置处理链
    if (sender.on) {

        // 移除之前所有处理链
        [_videoCamera removeAllTargets];

        // 创建美颜滤镜
        GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];

        // 设置GPUImage处理链,从数据源 => 滤镜 => 最终界面效果
        [_videoCamera addTarget:beautifyFilter];
        [beautifyFilter addTarget:_captureVideoPreview];

    } else {

        // 移除之前所有处理链
        [_videoCamera removeAllTargets];
        [_videoCamera addTarget:_captureVideoPreview];
    }


}

美颜基本概念

GPUImage原生美颜功效

GPUImage原生.gif

GPUImage扩展

GPU:(Graphic Processor
Unit图形处理单元)手机依然电脑用于图像处理和渲染的硬件

行使美颜滤镜完毕效益

美颜滤镜处理.gif

GPU工作原理:CPU指定显示控制器工作,显示控制器按照CPU的决定到指定的地点去取数据和指令,
近日的多少一般是从显存里取,若是显存里存不下,则从内存里取,
内存也放不下,则从硬盘里取,当然也不是内存放不下,而是为了节约内存的话,可以放在硬盘里,然后经过指令控制突显控制器去取。

GPUImage实战

OpenGL ES:(Open Graphics Library For Embedded(嵌入的)
Systems开源嵌入式系统图形处理框架),一套图形与硬件接口,用于把拍卖好的图片显示到显示屏上。

GPUImage原生美颜

  • 步骤一:使用Cocoapods导入GPUImage
  • 手续二:创制视频源GPUImageVideoCamera
  • 手续三:制造最后目的源:GPUImageView
  • 步骤四:成立滤镜组(GPUImageFilterGroup),须要结合亮度(GPUImageBrightnessFilter)双边滤波(GPUImageBilateralFilter)那八个滤镜达到美颜效果.
  • 手续五:设置滤镜组链
  • 手续六:设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果
  • 步骤七:开端征集视频

注意点:

  • SessionPreset最好利用AVCaptureSessionPresetHigh,会自动识别,若是用太高分辨率,当前配备不协助会间接报错
  • GPUImageVideoCamera必须要强引用,否则会被灭绝,不可以源源搜集视频.
  • 必须调用startCameraCapture,底层才会把募集到的视频源,渲染到GPUImageView中,就能显得了。
  • GPUImageBilateralFilter的distanceNormalizationFactor值越小,磨皮效果越好,distanceNormalizationFactor取值范围:
    大于1

- (void)viewDidLoad {
    [super viewDidLoad];

    // 创建视频源
    // SessionPreset:屏幕分辨率,AVCaptureSessionPresetHigh会自适应高分辨率
    // cameraPosition:摄像头方向
    GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront];
     videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    _videoCamera = videoCamera;

    // 创建最终预览View
    GPUImageView *captureVideoPreview = [[GPUImageView alloc] initWithFrame:self.view.bounds];
    [self.view insertSubview:captureVideoPreview atIndex:0];

    // 创建滤镜:磨皮,美白,组合滤镜
    GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc] init];

    // 磨皮滤镜
    GPUImageBilateralFilter *bilateralFilter = [[GPUImageBilateralFilter alloc] init];
    [groupFilter addTarget:bilateralFilter];
    _bilateralFilter = bilateralFilter;

    // 美白滤镜
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [groupFilter addTarget:brightnessFilter];
    _brightnessFilter = brightnessFilter;

    // 设置滤镜组链
    [bilateralFilter addTarget:brightnessFilter];
    [groupFilter setInitialFilters:@[bilateralFilter]];
    groupFilter.terminalFilter = brightnessFilter;

    // 设置GPUImage响应链,从数据源 => 滤镜 => 最终界面效果
    [videoCamera addTarget:groupFilter];
    [groupFilter addTarget:captureVideoPreview];

    // 必须调用startCameraCapture,底层才会把采集到的视频源,渲染到GPUImageView中,就能显示了。
    // 开始采集视频
    [videoCamera startCameraCapture];
}

- (IBAction)brightnessFilter:(UISlider *)sender {
    _brightnessFilter.brightness = sender.value;
}

- (IBAction)bilateralFilter:(UISlider *)sender {
    // 值越小,磨皮效果越好
    CGFloat maxValue = 10;
    [_bilateralFilter setDistanceNormalizationFactor:(maxValue - sender.value)];
}

GPUImage:是一个基于OpenGL ES
2.0图像和视频拍卖的开源iOS框架,提供各类各个的图像处理滤镜,并且帮衬照相机和视频机的实时滤镜,内置120三种滤镜效果,并且可以自定义图像滤镜。

动用美颜滤镜完成

  • 步骤一:使用Cocoapods导入GPUImage
  • 步骤二:导入GPUImageBeautifyFilter文件夹
  • 手续三:创设摄像源GPUImageVideoCamera
  • 步骤四:创设最后目的源:GPUImageView
  • 步骤五:创制最后美颜滤镜:GPUImageBeautifyFilter
  • 手续六:设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果

注意:

  • 切换美颜效果原理:移除在此以前所有处理链,重新安装处理链

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // 创建视频源
    // SessionPreset:屏幕分辨率,AVCaptureSessionPresetHigh会自适应高分辨率
    // cameraPosition:摄像头方向
    GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionFront];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    _videoCamera = videoCamera;

    // 创建最终预览View
    GPUImageView *captureVideoPreview = [[GPUImageView alloc] initWithFrame:self.view.bounds];
    [self.view insertSubview:captureVideoPreview atIndex:0];
    _captureVideoPreview = captureVideoPreview;

    // 设置处理链
    [_videoCamera addTarget:_captureVideoPreview];

    // 必须调用startCameraCapture,底层才会把采集到的视频源,渲染到GPUImageView中,就能显示了。
    // 开始采集视频
    [videoCamera startCameraCapture];

}

- (IBAction)openBeautifyFilter:(UISwitch *)sender {

    // 切换美颜效果原理:移除之前所有处理链,重新设置处理链
    if (sender.on) {

        // 移除之前所有处理链
        [_videoCamera removeAllTargets];

        // 创建美颜滤镜
        GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];

        // 设置GPUImage处理链,从数据源 => 滤镜 => 最终界面效果
        [_videoCamera addTarget:beautifyFilter];
        [beautifyFilter addTarget:_captureVideoPreview];

    } else {

        // 移除之前所有处理链
        [_videoCamera removeAllTargets];
        [_videoCamera addTarget:_captureVideoPreview];
    }


}

滤镜处理的法则:就是把静态图片或者视频的每一帧进行图片变换再突显出来。它的原形就是像素点的坐标和颜色变化

GPUImage扩展

GPUImage处理画面原理

源码下载

源码
小心:第五遍打开需要 pod install

GPUImage选择链式方式来拍卖画面,通过addTarget:方法为链条添加每个环节的对象,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链。

结束语

继续还会讲课GPUImage原理openGL
ES,视频编码,推流,聊天室,礼物系统等越来越多职能,敬请关切!!!

比如:墨镜原理,从外面盛传光线,会通过墨镜过滤,在传给大家的眼眸,就能感受到大白天也是漆黑一片,哈哈。

貌似的target可分为两类

中间环节的target,  一般是种种filter, 是GPUImageFilter或者是子类.

说到底环节的target, GPUImageView:用于显示到屏幕上,
或者GPUImageMovieWriter:写成视频文件。

GPUImage处理重要分为3个环节

source(摄像、图片源) -> filter(滤镜) -> final target
(处理后摄像、图片)

GPUImaged的Source:都延续GPUImageOutput的子类,作为GPUImage的数据源,就好比外面的强光,作为眼睛的输出源

GPUImageVideoCamera:用于实时拍摄摄像

GPUImageStillCamera:用于实时拍摄照片

GPUImagePicture:用于拍卖已经拍摄好的图样,比如png,jpg图片

GPUImageMovie:用于拍卖已经拍摄好的摄像,比如mp3文件

GPUImage的filter:GPUimageFilter类或者子类,那些类继承自GPUImageOutput,并且遵从GPUImageInput协议,那样既能流进,又能流出,就好比大家的墨镜,光线通过墨镜的拍卖,最后进入大家肉眼

GPUImage的final
target:GPUImageView,GPUImageMovieWriter就好比大家肉眼,最终输入目标。

美颜原理

磨皮(GPUImageBilateralFilter):本质就是让像素点模糊,可以利用高斯模糊,但是也许导致边缘会不清晰,用两者滤波(Bilateral
Filter) ,有针对的模糊像素点,能确保边缘不被歪曲。

美白(GPUImageBrightnessFilter):本质就是增长亮度。

美颜功效

关心效果,忽悠我

GPUImage原生美颜效用

运用美颜滤镜完毕效益

GPUImage实战

GPUImage原生美颜

步骤一:使用Cocoapods导入GPUImage

手续二:创造视频源GPUImageVideoCamera

步骤三:创造最后目标源:GPUImageView

步骤四:创建滤镜组(GPUImageFilterGroup),须求整合亮度(GPUImageBrightnessFilter)和两岸滤波(GPUImageBilateralFilter)那七个滤镜达到美颜效果.

手续五:设置滤镜组链

步骤六:设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果

手续七:起先征集视频

注意点:

SessionPreset最好应用AVCaptureSessionPresetHigh,会自动识别,假使用太高分辨率,当前设备不帮助会一向报错

GPUImageVideoCamera必须求强引用,否则会被销毁,不可能源源搜集摄像.

总得调用startCameraCapture,底层才会把采访到的摄像源,渲染到GPUImageView中,就能彰显了。

GPUImageBilateralFilter的distance诺玛lizationFactor值越小,磨皮效果越好,distance诺玛lizationFactor取值范围:大于1。

– (void)viewDidLoad {

[super viewDidLoad];

// 成立视频源

// SessionPreset:显示器分辨率,AVCaptureSessionPresetHigh会自适应高分辨率

// cameraPosition:视频头方向

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc]
initWithSessionPreset:AVCaptureSessionPresetHigh
cameraPosition:AVCaptureDevicePositionFront];

videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

_videoCamera = videoCamera;

// 创立最后预览View

GPUImageView *captureVideoPreview = [[GPUImageView alloc]
initWithFrame:self.view.bounds];

[self.view insertSubview:captureVideoPreview atIndex:0];

// 创造滤镜:磨皮,美白,组合滤镜

GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]
init];

// 磨皮滤镜

GPUImageBilateralFilter *bilateralFilter = [[GPUImageBilateralFilter
alloc] init];

[groupFilter addTarget:bilateralFilter];

_bilateralFilter = bilateralFilter;

// 美白滤镜

GPUImageBrightnessFilter *brightnessFilter =
[[GPUImageBrightnessFilter alloc] init];

[groupFilter addTarget:brightnessFilter];

_brightnessFilter = brightnessFilter;

// 设置滤镜组链

[bilateralFilter addTarget:brightnessFilter];

[groupFilter setInitialFilters:@[bilateralFilter]];

groupFilter.terminalFilter = brightnessFilter;

// 设置GPUImage响应链,从数额源 => 滤镜 => 最后界面效果

[videoCamera addTarget:groupFilter];

[groupFilter addTarget:captureVideoPreview];

//
必须调用startCameraCapture,底层才会把募集到的视频源,渲染到GPUImageView中,就能显得了。

// 开始收集视频

[videoCamera startCameraCapture];

}

– (IBAction)brightnessFilter:(UISlider *)sender {

_brightnessFilter.brightness = sender.value;

}

– (IBAction)bilateralFilter:(UISlider *)sender {

// 值越小,磨皮效果越好

CGFloat maxValue = 10;

[_bilateralFilter setDistanceNormalizationFactor:(maxValue –
sender.value)];

}

拔取美颜滤镜完结

步骤一:使用Cocoapods导入GPUImage

步骤二:导入GPUImageBeautifyFilter文件夹

手续三:创立视频源GPUImageVideoCamera

手续四:创建最后目的源:GPUImageView

步骤五:创设最后美颜滤镜:GPUImageBeautifyFilter

手续六:设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果

注意:

切换美颜成效原理:移除在此以前所有处理链,重新设置处理链

– (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

// 创制摄像源

// SessionPreset:屏幕分辨率,AVCaptureSessionPresetHigh会自适应高分辨率

// cameraPosition:摄像头方向

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc]
initWithSessionPreset:AVCaptureSessionPresetHigh
cameraPosition:AVCaptureDevicePositionFront];

videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

_videoCamera = videoCamera;

// 成立最终预览View

GPUImageView *captureVideoPreview = [[GPUImageView alloc]
initWithFrame:self.view.bounds];

[self.view insertSubview:captureVideoPreview atIndex:0];

_captureVideoPreview = captureVideoPreview;

// 设置处理链

[_videoCamera addTarget:_captureVideoPreview];

//
必须调用startCameraCapture,底层才会把采访到的视频源,渲染到GPUImageView中,就能突显了。

// 初阶收集视频

[videoCamera startCameraCapture];

}

– (IBAction)openBeautifyFilter:(UISwitch *)sender {

// 切换美颜功效原理:移除从前所有处理链,重新安装处理链

if (sender.on) {

// 移除此前所有处理链

[_videoCamera removeAllTargets];

// 创设美颜滤镜

GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter
alloc] init];

// 设置GPUImage处理链,从数额源 => 滤镜 => 最后界面效果

[_videoCamera addTarget:beautifyFilter];

[beautifyFilter addTarget:_captureVideoPreview];

} else {

// 移除从前所有处理链

[_videoCamera removeAllTargets];

[_videoCamera addTarget:_captureVideoPreview];

}

}

GPUImage扩展

GPUImage所有滤镜介绍

美颜滤镜

美图秀秀滤镜大集中

相关文章