Core Image是一个做图片滤镜用的框架,提供了大概120多重图片滤镜方式,其大概的使用方法简单记录如下:
1.基本概念
- CIContext:图像上下文,用于管理整个图片处理过程,不同的图形上下文将利用不同的图像处理硬件进行图像处理(在 iOS 中可以通过不同的方式创建图像上下文,例如可以创建基于 CPU 的图像上下方、创建基于 GPU 的图像上下方以及创建 OpenGL 优化过的图像上下文
- CIFilter:图像处理滤镜,每种滤镜有不同的参数设置
- CIImage:Core Image 框架中的图像类型,主要用于输入和输出图像
2.使用
- 当前系统支持的滤镜类型
#pragma mark 查看所有内置滤镜
-(void)showAllFilters{
NSArray *filterNames=[CIFilter filterNamesInCategory:kCICategoryBuiltIn];
for (NSString *filterName in filterNames) {
CIFilter *filter=[CIFilter filterWithName:filterName];
NSLog(@"\rfilter:%@\rattributes:%@",filterName,[filter attributes]);
}
}
- 第一步 首先创建一个上下文,用于做图片滤镜使用
_context=[CIContext contextWithOptions:nil];
- 第二步 取得滤镜
_colorControlsFilter=[CIFilter filterWithName:@"CIColorControls"];
- 第三步 初始化CIImage源图像
_image=[CIImage imageWithCGImage:selectedImage.CGImage];
- 第四步 设置滤镜的输入图片
[_colorControlsFilter setValue:_image forKey:@"inputImage"];
- 第五步 更改需要变化的滤镜参数
[_colorControlsFilter setValue:[NSNumber numberWithFloat:slider.value] forKey:@"inputSaturation"];
- 第六步 如果页面上的图片需要实时显示出来,就需要重新设置一下图片
#pragma mark 将输出图片设置到UIImageView
-(void)setImage{
CIImage *outputImage= [_colorControlsFilter outputImage];//取得输出图像
CGImageRef temp=[_context createCGImage:outputImage fromRect:[outputImage extent]];
_imageView.image=[UIImage imageWithCGImage:temp];//转化为CGImage显示在界面中
CGImageRelease(temp);//释放CGImage对象
}
- 第七步 拿到imageView中的图片,进行存储就可以了
-(void)savePhoto:(UIBarButtonItem *)btn{
//保存照片到相册
UIImageWriteToSavedPhotosAlbum(_imageView.image, nil, nil, nil);
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Sytem Info" message:@"Save Success!" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];
}