Search code examples
iosobjective-cfiltergpuimagebrightness

How to add multiple filters to UIImage GPUImage?


I noticed a lot of people asking questions about linking filters with GPUImage. I can't quite figure out how to do it succinctly. Finally got it working tonight. Just wanted to share my code so people can link to the solution.


Solution

  • UIImage *faceImage = [UIImage imageNamed:@"469453586_640.jpg"];
    UIImageView *face = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, faceImage.size.width/2.0, faceImage.size.height/2.0)];
    [face setImage:faceImage];
    [self.view addSubview:face];
    
    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:faceImage];
    
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [brightnessFilter setBrightness:.15];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc] init];
    
    GPUImagePosterizeFilter *posterizeFilter = [[GPUImagePosterizeFilter alloc] init];
    [posterizeFilter setColorLevels:1];
    
    
    [stillImageSource addTarget:brightnessFilter];
    [brightnessFilter addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:posterizeFilter];
    
    // these need to be changed if you change the order of your filters
    //    [brightnessFilter useNextFrameForImageCapture];
    //    [grayscaleFilter useNextFrameForImageCapture];
    [posterizeFilter useNextFrameForImageCapture];
    
    [stillImageSource processImage];
    
    [face setImage: [posterizeFilter imageFromCurrentFramebuffer]];