I have an UIImage and want to shift it\'s saturation about +10%. Are there standard methods or functions that can be used for this?
There's a CoreImage filter for this. CIColorControls
Just set the inputSaturation
to < 1.0 to desaturate or > 1.0 to increase saturation...
eg. Here's a method I've added in a category on UIImage
to desaturate an image.
-(UIImage*) imageDesaturated {
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *ciimage = [CIImage imageWithCGImage:self.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"];
[filter setValue:ciimage forKey:kCIInputImageKey];
[filter setValue:@0.0f forKey:kCIInputSaturationKey];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return image;
}