iOS中的CoreImage框架
2016-09-07 16:21
363 查看
Core Image是iOS中的图像处理框架,使用上比较简单方便,常用于照片的滤镜处理,还有就是面部检测(没有识别)等用途。
CoreImage框架里主要包括以下几个我们常用的模块:
CIImage:这是代表图像的类。
CIFilter:代表滤镜的一个类,能够通过key-value来设置输入值,用于为CIImage添加滤镜。
CIContext:用于渲染CIImage。
CIDetector:用于分析CIImage,得到CIFeature。
CIFeature\CIFaceFeature:这部分主要用于面部检测等应用。
在使用CoreImage的时候,处理流程比较简单,基本流程如下:
初始化CIImage;
初始化滤镜CIFilter,通过键-值编码设置输入值。(也就是设置什么滤镜)
将图片输入到滤镜当中;
将处理好的图片输出;
初始化CIContext;
通过CIContext获取到CGImage句柄,最终获取到图片;如CIContext是基于GPU的,可以用Open ES 2.0画出来;
使用完后,记得释放CGImageRef;
下面有一个为图片加上高斯模糊的例子:
效果如下:
原始图像(喵^-^):
高斯模糊后的图片:
如果要设置模糊程度,即在将图片输入滤镜后,修改滤镜的值就是了,如:
Log出来的属性信息:
这里面可以看到,在上面设置滤镜的图片的时候用的kCIOutputImageKey对应的就是inputImage那个字段;而下面inputRadius就是可以调节模糊程度的,告诉了这个值的一些信息,如类型、默认值、描述等,一般带input的字段就可以设置值来调节了,所以对应着就是设置kCIInputRadiusKey值就可以改变模糊程度了。
下面是不同的模糊程度的对比:
设置模糊程度5:
设置模糊程度100:
其他滤镜用法相似。列举常用的几个:
CIColorControls:可调节图片的亮度、对比度、饱和度等。
CIColorInvert:反转颜色的滤镜。
CISepiaTone:棕色滤镜。
CIPixellate:像素滤镜。(恩,可以打马赛克了)
CoreImage框架里主要包括以下几个我们常用的模块:
CIImage:这是代表图像的类。
CIFilter:代表滤镜的一个类,能够通过key-value来设置输入值,用于为CIImage添加滤镜。
CIContext:用于渲染CIImage。
CIDetector:用于分析CIImage,得到CIFeature。
CIFeature\CIFaceFeature:这部分主要用于面部检测等应用。
在使用CoreImage的时候,处理流程比较简单,基本流程如下:
初始化CIImage;
初始化滤镜CIFilter,通过键-值编码设置输入值。(也就是设置什么滤镜)
将图片输入到滤镜当中;
将处理好的图片输出;
初始化CIContext;
通过CIContext获取到CGImage句柄,最终获取到图片;如CIContext是基于GPU的,可以用Open ES 2.0画出来;
使用完后,记得释放CGImageRef;
下面有一个为图片加上高斯模糊的例子:
UIImage *image = [UIImage imageNamed:@"cat.jpg"]; //coreImage使用部分 CIImage *ciImage = [[CIImage alloc] initWithImage:image]; //选择高斯模糊滤镜 CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; //将图片输入到滤镜 [blurFilter setValue:ciImage forKey:kCIInputImageKey]; //输出图像 CIImage *outCiImage = [blurFilter valueForKey:kCIOutputImageKey]; CIContext *ciContext = [CIContext contextWithOptions:nil]; CGImageRef outCGImage = [ciContext createCGImage:outCiImage fromRect[outCiImage extent]]; //最终图片 UIImage *blurImage = [UIImage imageWithCGImage:outCGImage]; //释放 CGImageRelease(outCGImage);
效果如下:
原始图像(喵^-^):
高斯模糊后的图片:
如果要设置模糊程度,即在将图片输入滤镜后,修改滤镜的值就是了,如:
//设置滤镜的模糊程度,是采用kvc的形式 [blurFilter setValue:@(100) forKey:kCIInputRadiusKey]; //要查看有哪些属性可以设置,可以打印出属性来查看 NSLog(@"%@",[blurFilter attributes]);
Log出来的属性信息:
这里面可以看到,在上面设置滤镜的图片的时候用的kCIOutputImageKey对应的就是inputImage那个字段;而下面inputRadius就是可以调节模糊程度的,告诉了这个值的一些信息,如类型、默认值、描述等,一般带input的字段就可以设置值来调节了,所以对应着就是设置kCIInputRadiusKey值就可以改变模糊程度了。
下面是不同的模糊程度的对比:
设置模糊程度5:
设置模糊程度100:
其他滤镜用法相似。列举常用的几个:
CIColorControls:可调节图片的亮度、对比度、饱和度等。
CIColorInvert:反转颜色的滤镜。
CISepiaTone:棕色滤镜。
CIPixellate:像素滤镜。(恩,可以打马赛克了)
PS:
在简书上看到的文章也记录一下:使用Core Image 滤镜相关文章推荐
- 详解OS X和iOS图像处理框架Core Image
- OS X 和 IOS 的图像处理框架 (Core Image)
- iOS高级-QuartzCore框架-复习和补充、模仿imageView、打水印
- iOS图像处理框架Core Image
- iOS 中的CoreImage框架(framework)
- iOS图像处理框架Core Image
- 详解OS X和iOS图像处理框架Core Image
- iOS之CoreImage图像处理框架
- 详解OS X和iOS图像处理框架Core Image
- iOS框架介绍之coreImage
- IOS 中的CoreImage框架(framework)
- IOS 中的CoreImage框架(framework)
- 二维码生成(利用iOS CoreImage框架)
- IOS 中的CoreImage框架
- IOS 中的CoreImage框架(framework)
- ios滤镜Core Image
- Beginning Core Image in iOS 6
- 【IOS功能实现】之:Core Plot开源框架使用
- iOS 上的蓝牙框架 - Core Bluetooth for iOS
- iOS 上的蓝牙框架 - Core Bluetooth for iOS