GPUImage關(guān)于GPUImageLookupFilter和GPUImageToneCurveFilter濾鏡

GPUImageLookupFilter需要一個顏色查找表文件,這個文件是一個圖片,這個原始圖片在gpuimage資源文件中找;
QQ20180828-154120@2x.png

至于該濾鏡的初始化和自定義,可以參考GPUImage官方寫好的濾鏡GPUImageAmatorkaFilter來寫。

GPUImageToneCurveFilter需要個顏色曲線文件,這個文件是一個acv格式的文件,使用的時候用initWithACVURL這個方法初始化,url可以是本地的url(沒有嘗試網(wǎng)絡(luò)url)
以下片段是把色調(diào)曲線濾鏡加到了攝像頭上,實時渲染

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

以下片段是把色調(diào)曲線濾鏡加到圖片上,渲染

+ (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];
    //導(dǎo)入之前保存的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,不加這一句,濾鏡會被提前釋放導(dǎo)致系統(tǒng)崩潰
    
    [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)
    {
        //設(shè)置初始濾鏡
        myFilterGroup.initialFilters = @[newTerminalFilter];
        //設(shè)置末尾濾鏡
        myFilterGroup.terminalFilter = newTerminalFilter;
        
    } else
    {
        GPUImageOutput<GPUImageInput> *terminalFilter    = myFilterGroup.terminalFilter;
        NSArray *initialFilters                          = myFilterGroup.initialFilters;
        
        [terminalFilter addTarget:newTerminalFilter];
        
        //設(shè)置初始濾鏡
        myFilterGroup.initialFilters = @[initialFilters[0]];
        //設(shè)置末尾濾鏡
        myFilterGroup.terminalFilter = newTerminalFilter;
    }
}

上面兩種情況下都是加上了美顏濾鏡,如果不需要的話,直接去掉就行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,172評論 3 119
  • 昆明梁艷分享185天。網(wǎng)絡(luò)中級五期。2017.11.20 今天下午有幸約到了李老師和張老師,我作為觀察...
    詩心小鹿閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容