必赢亚洲手机app下载


大学四年回想

自己写过的最惊险的一本书

怎么快捷的开销一个完好无缺的iOS直播app

前言

在看那篇之前,假若您还不驾驭直播原理,请查看那篇小说如何快速的开销一个完整的iOS直播app(原理篇)

开发一款直播app,美颜成效是很主要的,假使没有美颜功效,可能分分钟钟掉粉千万,本篇主要讲师直播中美颜功能的实现原理,并且完成美颜效用。

一旦喜欢自己的小说,可以关心本身博客园:袁峥Seemygo

选拔GPUImage处理直播进度中国和美利坚合众国颜的流程

  • 采访视频 => 获取每一帧图片 => 滤镜处理 => GPUImageView显示

美颜原理.png

美颜基本概念

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多种滤镜效果,并且可以自定义图像滤镜。

滤镜处理的原理:就是把静态图片或者视频的每一帧进行图纸变换再呈现出来。它的实质就是像素点的坐标和颜色变化

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:用于拍卖已经拍照好的录像,比如mp4文件
    • GPUImage的filter:GPUimageFilter类或者子类,那个类继承自GPUImageOutput,并且坚守GPUImageInput协议,那样既能流进,又能流出,就好比大家的墨镜,光线通过墨镜的处理,最后进入大家肉眼
    • GPUImage的final target:GPUImageView,GPUImageMovieWriter就好比大家肉眼,最后输入目的。

GPUImage处理原理.png

美颜原理

  • 磨皮(GPUImageBilateralFilter):本质就是让像素点模糊,可以动用高斯模糊,然则可能造成边缘会不清晰,用两者滤波(Bilateral
    Filter) ,有针对性的歪曲像素点,能担保边缘不被混为一谈。
  • 美白(GPUImageBrightnessFilter):本质就是增强亮度。

美颜成效

  • 关注效果,忽悠本人

GPUImage原生美颜功效

GPUImage原生.gif

选择美颜滤镜完结效益

美颜滤镜处理.gif

GPUImage实战

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)];
}

应用美颜滤镜完结

  • 步骤一:使用Cocoapods导入GPUImage
  • 366net必赢亚洲手机版,步骤二:导入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扩展

源码下载

源码
在意:第一回打开需求 pod install

结束语

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

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图