首页 > 代码库 > IOS图像处理(9)使用CoreImage滤镜

IOS图像处理(9)使用CoreImage滤镜

CoreImage是IOS5中新增框架,通过这个框架我们可以轻松地对图片进行各种特效处理

使用CoreImage的主要流程如下(需要添加CoreImage框架至项目中):

1 创建CIContext,IOS系统提供了3种方法创建CIContext

a.基于CPU

CIContext *context = [CIContext contextWithOption:@{kCIContextUseSoftwareRenderer:@YES}];

b.基于GPU

CIContext *context = [CIContext contextWithOption:nil];

最常用也是性能较好地一种方式,缺点是基于GPU的CIContext无法跨应用访问,比如打开UIImagePickerController选取图片,如果直接在委托方法中使用CIContext,将会自动降为基于CPU,所以可以在委托方法中保存图片,回到主类中调用CIContext进行处理

c.基于OpenGL优化,可获得实时性能

EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

CIContext *context = [CIContext contextWithEAGLContext:eaglContext];

 

2 创建CIFilter过滤器

 

3 创建CIImage图片作为源图片,可以使用NSURL,UIImage以及NSData创建

 

4 将CIImage设置为CIFilter的inputImage,同时根据不同的过滤器设置不同的参数

 

5 通过CIFilter获取进过过滤器转换后的图片,图片格式为CIImage,通过CIContext可以得到CGImage

 

以下例子展示了像素画的过滤器

- (void)viewDidLoad{    [super viewDidLoad];    //可以打印出所有的过滤器以及支持的属性    NSArray *filters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];    for (NSString *filterName in filters) {        CIFilter *filter = [CIFilter filterWithName:filterName];        NSLog(@"%@,%@",filterName,[filter attributes]);    }            //创建基于GPU的CIContext    CIContext *context = [CIContext contextWithOptions:nil];        //创建过滤器    CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];        //创建CIImage    CIImage *sourceImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"]]];        //将CIImage设为源图片    [filter setValue:sourceImage forKey:@"inputImage"];        //设置过滤参数(像素大小)    [filter setValue:@15 forKey:@"inputScale"];        //得到输出图片    CIImage *outputImage = [filter outputImage];        CGImageRef cgImage= [context createCGImage:outputImage fromRect:[UIScreen mainScreen].bounds];    UIImage *image = [UIImage imageWithCGImage:cgImage];        //调用了create创建,需要release    CGImageRelease(cgImage);        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];    [self.view addSubview:imageView];    } 

 

IOS图像处理(9)使用CoreImage滤镜