CoreImage 图片处理

CoreImage 是苹果 iOS5新增的一个 OC 框架,提供了强大的图像处理功能, 用于对基于像素的图像进行操做与分析, 提供了不少滤镜(Filter),造成强大的自定义效果css

CIImage 类框架

用于保存图像数据, 初始化方法:ide

1.imageWithCGImage: 2.imageWithContentsOfURL: 3.imageWithCVImageBuffer: 4.imageWithData:

CFFilter 滤镜类ui

实例化滤镜对象,经过键-值KVC来设置输入值,及效果的改变. spa

1. 一般 CIFilter 对象须要一个或多个图像做为输入,-> 2.经过 KVC 设置一些参数 -> 3.并产生 CIImage 类型的实体做为输出3d

CIFilter * filter = [CIFilter filterWithName:@"CIGaussianBlur"]; 

下面是查询须要的滤镜种类的方法:code

1.查询 效果分类中 包含什么效果:filterNamesInCategory:对象

 (1)按住command 点击CIFilter 进入接口文件 找到第128行-148行所有都是 效果分类
 (2)选择其中某一个分类 NSLog -> [CIFilter filterNamesInCategory:刚才拷贝的分类]; -> 打印出来的 是这个分类包含的全部 效果 -> 拷贝选择其中的某一个效果.
2.查询 使用的效果中 能够设置什么属性(KVC) attributes
   NSLog -> [CIFilter filterWithName:刚才拷贝选择其中的某一个效果].attributes ->获得这个滤镜全部能够设置的属性
   调用[CIFilter attributes]会返回filter详细信息,
blog

 

CIContext 上下文接口

CIContext 又称上下文用来渲染 CIImage, 将做用在 CIImage 上的滤镜链 应用到原始的图片数据

获得处理后的图片:

CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"];
CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];
UIImage * image = [UIImage imageWithCGImage:imageRef];
 

使用步骤:

1.建立 CIImage对象

2.建立 CIFilter 滤镜对象

3.利用 KVC 设置滤镜对象的属性

4.经过滤镜对象获取处理后图片

5.建立 CIContext对象, 将获得的图片渲染到视图上

🌰例子:

//模糊设置处理

 

-(void)filterGaussianBlur

{

    

    //建立CIContext对象

    CIContext * context = [CIContext contextWithOptions:nil];

    //获取图片

    CIImage * image = [CIImage imageWithCGImage:[_image CGImage]];

    //建立CIFilter

    CIFilter * gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];

    //设置滤镜输入参数

    [gaussianBlur setValue:image forKey:@"inputImage"];

    //设置模糊参数

    [gaussianBlur setValue:[NSNumber numberWithFloat:_slider.value*10] forKey:@"inputRadius"];

    

    //获得处理后的图片

    CIImage* resultImage = [gaussianBlur valueForKey:@"outputImage"];

    CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];

    UIImage * image1 = [UIImage imageWithCGImage:imageRef];

    [_imageView setImage:image1];

    CFRelease(imageRef);

    

}

 

 

 

//旧色调处理

-(void)filterSepiaTone

{

    //建立CIContext对象(默认值,传入nil)

    CIContext * context = [CIContext contextWithOptions:nil];

    //获取图片

    CIImage *cimage = [CIImage imageWithCGImage:[_image CGImage]];

    //建立CIFilter

    CIFilter * sepiaTone = [CIFilter filterWithName:@"CISepiaTone"];

    //设置滤镜输入参数

    [sepiaTone setValue:cimage forKey:@"inputImage"];

    

    //获取滑块的Value,设置色调强度

    [sepiaTone setValue:[NSNumber numberWithFloat:[_slider value]]forKey:@"inputIntensity"];

    //建立处理后的图片

    CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"];

    CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];

    UIImage * image = [UIImage imageWithCGImage:imageRef];

    [_imageView setImage:image];

    CFRelease(imageRef);

}

 

参考:

https://www.jianshu.com/p/cd7bb24a68d0

https://www.jianshu.com/p/5ac1b631c33e

//获取 fileterName

https://www.jianshu.com/p/31dc42d691ac

相关文章
相关标签/搜索