从 iOS 5 开始,您可以使用 Core Image 过滤器来调整一系列图像参数。
例如,要调整对比度,这段代码就像一个魅力:
- (void)setImageContrast:(float)contrast forImageView:(UIImageView *)imageView {
if (contrast > MIN_CONTRAST && contrast < MAX_CONTRAST) {
CIImage *inputImage = [[CIImage alloc] initWithImage:imageView.image];
CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIColorControls"];
[exposureAdjustmentFilter setDefaults];
[exposureAdjustmentFilter setValue:inputImage forKey:@"inputImage"];
[exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:contrast] forKey:@"inputContrast"]; //default = 1.00
// [exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:1.0f] forKey:@"inputSaturation"]; //default = 1.00
// [exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:0.0f] forKey:@"inputBrightness"];
CIImage *outputImage = [exposureAdjustmentFilter valueForKey:@"outputImage"];
CIContext *context = [CIContext contextWithOptions:nil];
imageView.image = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
}
}
NB 对比度的默认值为 1.0(建议的最大值为 4.0)。
另外,这里对imageView的图像计算对比度,所以重复调用这个方法会累积对比度。意思是,如果你先用对比度值 2.0 调用这个方法,然后再用对比度值 3.0 调用这个方法,你将得到对比度值增加 6.0 (2.0 * 3.0) 的原始图像 - 而不是 5.0。
查看Apple 文档以获取更多过滤器和参数。
要在代码中列出所有可用的过滤器和参数,只需运行以下循环:
NSArray* filters = [CIFilter filterNamesInCategories:nil];
for (NSString* filterName in filters)
{
NSLog(@"Filter: %@", filterName);
NSLog(@"Parameters: %@", [[CIFilter filterWithName:filterName] attributes]);
}