
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;
}
}
上面兩種情況下都是加上了美顏濾鏡,如果不需要的話,直接去掉就行