GPUImage关于GPUImageLookupFilter和GPUImageToneCurveFilter滤镜

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,050评论 3 119
  • 昆明梁艳分享185天。网络中级五期。2017.11.20 今天下午有幸约到了李老师和张老师,我作为观察...
    诗心小鹿阅读 1,391评论 0 0