首先介绍一下Core Image,他是一个很强大的图像处理框架,他可以让你简单的应用各种滤镜来处理图像,比如说色相,饱和度,亮度等等。。。他是运用GPU(CPU)实时地处理图像数据和视频的帧。而且Core Image滤镜可以叠加在一起,产生多滤镜的效果。因为没有滤镜都有属于自己唯一的参数,可以通过修改这些参数来达到预期效果。

在应用Core Image时,要注意着三个比较总要的类:CIContext ,CIImage ,CIFilter.

1.CIContext:所有的图像处理都在一个CIContext中完成,相当于OpenGL中的上下文;

2.CIImage:用来保存图像数据。同时他可以通过像素数据构造出来;

//创建CIImage对象

UIImage *image = [UIImage imageNamed:@"test.png"];

NSData *data = UIImagePNGRepresentation(image);

self.ciImage = [CIImage imageWithData:data];

3.CIFiter:包含了一个字典结构的滤镜类,同时滤镜有很多中。各种滤镜都定义了他们独自不同的属性。他的种类有很多,可以参考http://blog.sina.com.cn/s/blog_5fb39f9101018g34.html

//打印所有的滤镜类型

NSArray *cifilter = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];

NSLog(@"滤镜名称:\n%@\n滤镜数:%ld", cifilter,cifilter.count);

废话不多说,直接上代码

//创建CIImage对象

UIImage *image = [UIImage imageNamed:@"girl.png"];

NSData *data = UIImagePNGRepresentation(image);

self.ciImage = [CIImage imageWithData:data];

// 创建基于CPU的CIContext对象

self.context = [CIContext contextWithOptions:nil];

// 创建过滤器

//调节色相

self.colourFilter = [CIFilter filterWithName:@"CIHueAdjust"];

[self.colourFilter setDefaults];

// 设置过滤器参数,来改变图像数据

在设置过滤器的参数时,你要明确当前过滤器的属性,可以通过打印出相应过滤器的字典数据查看并进一步更改:

NSLog(@"CIHueAdjust______%@",[self.colourFilter attributes]);

/**

inputAngle =     {

        CIAttributeClass = NSNumber;

        CIAttributeDefault = 0;

        CIAttributeDescription = "An angle (in radians) to use to correct the hue of an image.";

        CIAttributeDisplayName = Angle;

        CIAttributeIdentity = 0;

        CIAttributeSliderMax = "3.141592653589793";

        CIAttributeSliderMin = "-3.141592653589793";

        CIAttributeType = CIAttributeTypeAngle;

    };

    inputImage =     {

        CIAttributeClass = CIImage;

        CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";

        CIAttributeDisplayName = Image;

        CIAttributeType = CIAttributeTypeImage;

    };

*/

//可以看到inputAngle输入角度的取值范围"-3.141592653589793-3.141592653589793"

[_colourFilter setValue:_ciImage forKey:@"inputImage"];

[_colourFilter setValue:[NSNumber numberWithFloat:2] forKey:@"inputAngle"];

// 得到过滤后的图片

CIImage *outputImage = [_colourFilter outputImage];

// 转换图片

CGImageRef cgimg = [_context createCGImage:outputImage fromRect:[outputImage extent]];

UIImage *newImg = [UIImage imageWithCGImage:cgimg];

// 显示图片

[_imageView setImage:newImg];

CGImageRelease(cgimg);

具体demo链接https://github.com/White007/CIFilterDemo.git

强大的Core Image框架,各种滤镜处理图像的更多相关文章

  1. Core Graphics框架

    在iOS中常用的框架是Quartz 2D,它是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.我们日常开发所用到的UIKit的组件都是由Core Graphics框架进行绘制的. ...

  2. iOS绘图UIBezierPath 和 Core Graphics框架

    前言 iOS系统本身提供了两套绘图的框架,即UIBezierPath 和 Core Graphics.而前者所属UIKit,其实是对Core Graphics框架关于path的进一步封装,所以使用起来 ...

  3. 强大的Core Image(教你做自己的美图秀秀))

    iOS5新特性:强大的Core Image(教你做自己的美图秀秀))       iOS5给我们带来了很多很好很强大的功能和API.Core Image就是其中之一,它使我们很容易就能处理图片的各种效 ...

  4. ASP.NET Core 6框架揭秘实例演示[01]: 编程初体验

    作为<ASP.NET Core 3框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>提供了很多新的章节,同时对现有的内容进行大量的修改.虽然本书旨在对ASP.NET ...

  5. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  6. Core Foundation框架

    转载自:http://blog.csdn.net/weiwangchao_/article/details/7744972 Core Foundation框架 (CoreFoundation.fram ...

  7. IOS之Core Foundation框架和Cocoa Foundation框架的区别

    Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的 ...

  8. iPhone的定位技术与Core Location框架

    来源:http://www.cnblogs.com/lovecode/archive/2011/12/24/2300579.html iPhone定位来源通常有:1. GPS定位 2. WiFi定位 ...

  9. 【转】Core Bluetooth框架之一:Central与Peripheral

    原文网址:http://southpeak.github.io/blog/2014/07/29/core-bluetoothkuang-jia-zhi-%5B%3F%5D-:centralyu-per ...

随机推荐

  1. Hibernate+jxl+excel导入数据库

    在将excel中的10w行数据导入数据库中时,总发生内存溢出,一开始使用的Spring+Hibernate;不知如何使用批处理,后来只是用Hibernate,10W行数据几分钟完成, 代码如下: pu ...

  2. 算法-KMP模式匹配算法

    1朴素算法:逐个比较 2 主要是解决多余比较的麻烦,通过处理比较字符串是否含有重复的字符的问题.

  3. Constructing Roads(SPFA+邻接表)

    题目描述 Long long ago, There was a country named X, the country has N cities which are numbered from 1 ...

  4. Android 国内镜像

    Android SDK官网国内很难直接访问,除了FQ/VPN等方法还是很不方便. 原有的Android SDK直接下载因http://dl-ssl.google.com/android/reposit ...

  5. DSP知识

    自己认为是问题的问题,时常更新,为了记录学习的点点滴滴. 1.什么是boot loader ? DSP 的速度尽快,EPROM 或flash 的速度较慢, 而DSP 片内的RAM很快, 片外的RAM也 ...

  6. hdoj 2199 Can you solve this equation?【浮点型数据二分】

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. 如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)

    豆电雨 搬砖自味精:http://awhisper.github.io/2016/03/12/滚动圆角卡顿刨根问底/ 使用Quartz2D直接绘制图片 步骤:  a.创建目标大小(cropWidth, ...

  8. 不区分大小写的in_array实现 thinkphp框架

    // 不区分大小写的in_array实现 function in_array_case($value,$array) { return in_array(strtolower($value),arra ...

  9. 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中

    上传图片并保存到数据库 seam给我们提供了 s:fileUpload 标签以完成文件上传功能.使用该标签时,要在web.xml中声明一个Seam的过滤器: <filter> <fi ...

  10. IOS 多个ImageView图片层叠透明区域点击事件穿透

    经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件 实现人体各个部位点击 - (BOOL) pointInside:(CGPoint)point withEve ...