美文网首页
GPUImage关于GPUImageLookupFilter和G

GPUImage关于GPUImageLookupFilter和G

作者: 球球ol | 来源:发表于2018-08-28 16:03 被阅读188次
GPUImageLookupFilter需要一个颜色查找表文件,这个文件是一个图片,这个原始图片在gpuimage资源文件中找; QQ20180828-154120@2x.png

至于该滤镜的初始化和自定义,可以参考GPUImage官方写好的滤镜GPUImageAmatorkaFilter来写。

GPUImageToneCurveFilter需要个颜色曲线文件,这个文件是一个acv格式的文件,使用的时候用initWithACVURL这个方法初始化,url可以是本地的url(没有尝试网络url)
以下片段是把色调曲线滤镜加到了摄像头上,实时渲染

    NSBundle *bundle = [NSBundle bundleForClass:self.class];
    NSURL *filterAmaro = [NSURL fileURLWithPath:[bundle pathForResource:@"fugu" ofType:@"acv"]];
    self.toneCurveFilter = [[GPUImageToneCurveFilter alloc] initWithACVURL:filterAmaro];

    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    [self.camera addTarget:beautifyFilter];
    [beautifyFilter addTarget:self.toneCurveFilter];
    [self.toneCurveFilter addTarget:self.preview];
    [self.camera startCameraCapture];

以下片段是把色调曲线滤镜加到图片上,渲染

+ (UIImage *)applyFIlter:(UIImage *)originalImg withCurrentFilterName:(NSString *)filterName{
    
    UIImage *inputImage =originalImg;
    
    UIImage *outputImage = nil;
    
    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
    
    //添加滤镜
    
    NSBundle *bundle = [NSBundle bundleForClass:self.class];
    NSURL *filterAmaro = [NSURL fileURLWithPath:[bundle pathForResource:filterName ofType:@"acv"]];
    
    GPUImageToneCurveFilter *toneCurveFilter = [[GPUImageToneCurveFilter alloc] initWithACVURL:filterAmaro];
    //导入之前保存的NewLookupTable.png文件
    FSKGPUImageBeautyFilter *beautyFilter = [[FSKGPUImageBeautyFilter alloc] init];
    GPUImageFilterGroup *group = [[GPUImageFilterGroup alloc] init];
    [self addGPUImageFilterFromGroup:group withGPUImageFilter:toneCurveFilter];
    [self addGPUImageFilterFromGroup:group withGPUImageFilter:beautyFilter];
    
    
    [stillImageSource addTarget:group];//相当于retain,不加这一句,滤镜会被提前释放导致系统崩溃
    
    [group useNextFrameForImageCapture];
    
    if([stillImageSource processImageWithCompletionHandler:nil]) {
        
        outputImage= [group imageFromCurrentFramebuffer];
        
    }
    
    return outputImage;
    
}
+ (void)addGPUImageFilterFromGroup:(GPUImageFilterGroup *)myFilterGroup withGPUImageFilter:(GPUImageFilter *)filter{
    
    [myFilterGroup addFilter:filter];
    
    GPUImageOutput<GPUImageInput> *newTerminalFilter = filter;
    
    NSInteger count = myFilterGroup.filterCount;
    
    if (count == 1)
    {
        //设置初始滤镜
        myFilterGroup.initialFilters = @[newTerminalFilter];
        //设置末尾滤镜
        myFilterGroup.terminalFilter = newTerminalFilter;
        
    } else
    {
        GPUImageOutput<GPUImageInput> *terminalFilter    = myFilterGroup.terminalFilter;
        NSArray *initialFilters                          = myFilterGroup.initialFilters;
        
        [terminalFilter addTarget:newTerminalFilter];
        
        //设置初始滤镜
        myFilterGroup.initialFilters = @[initialFilters[0]];
        //设置末尾滤镜
        myFilterGroup.terminalFilter = newTerminalFilter;
    }
}

上面两种情况下都是加上了美颜滤镜,如果不需要的话,直接去掉就行

相关文章

  • GPUImage关于GPUImageLookupFilter和G

    至于该滤镜的初始化和自定义,可以参考GPUImage官方写好的滤镜GPUImageAmatorkaFilter来写...

  • GPUimage -1

    GPUImage框架地址: [https://github.com/BradLarson/GPUImage] 对G...

  • GPUImage工程配置相关的笔记

    GPUImage的导入 下载GPUImage,地址:https://github.com/BradLarson/G...

  • GPUImage概览

    读GPUImage源码,深入了解GPUImage原理及OpenGL ES。 关于GPUImage GPUImage...

  • iOS - <直播系列> GPUImage初体验

    示例Demo点击下载 GPUImage仿斗鱼视频采集 GPUImage的介绍 GPUImage 是一个开源的基于G...

  • GPUImage简介

    GPUImage 概述 GPUImage是一个遵循BSD的iOS开源库,通过使用它可以为图片、实时视频和影片添加G...

  • GPUImage

    1.添加GPUImage静态库 关于导入GPUimage到工程已经简单使用:只能用于真机关于GPUImage的导入...

  • GPUImage图片处理的使用

    关于GPUImage 这里直接引用官方描述:The GPUImage framework is a BSD-lic...

  • GPUImage学习及相关资料

    Part one: 关于GPUImage 这里直接引用官方描述: The GPUImage framework i...

  • iOS-红蓝3D图片制作

    本文主要是使用『GPUImage』进行图像的处理,下载方式和安装方法,请参考Github,链接:https://g...

网友评论

      本文标题:GPUImage关于GPUImageLookupFilter和G

      本文链接:https://www.haomeiwen.com/subject/ytblpftx.html