首先介绍一下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. Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法

    1.什么是MLBaseMLBase是Spark生态圈的一部分,专注于机器学习,包含三个组件:MLlib.MLI.ML Optimizer. ML Optimizer: This layer aims ...

  2. JAVA的节点流和处理流以及流的关闭顺序

    今天在编写hadoop程序的时候,用到了流的处理.关闭流的时候出现了问题: 代码: FSDataInputStream fsin = fs.open(new Path(filein)); FSData ...

  3. c3p0数据库连接池的使用

    一.c3p0与dbcp区别 dbcp没有自动回收空闲连接的功能 c3p0有自动回收空闲连接功能 <C3P0是Hibernate3.0默认的自带数据库连接池,DBCP是Apache开发的数据库连接 ...

  4. 【CF】220B Little Elephant and Array

    区间动态统计的好题. /* */ #include <iostream> #include <string> #include <map> #include < ...

  5. poj1637

    混合图欧拉回路首先先明确基本概念连通的无向图存在欧拉回路当且仅当不存在奇点连通的有向图当且仅当每个点入度=出度这道题我们显然应该当作连通的有向图来做这个问题的困难之处在于我不知道应该从无向边的什么方向 ...

  6. Node.js权威指南 (4) - 模块与npm包管理工具

    4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...

  7. removeTask

    SystemUI中,Home键调出小刷子杀最近任务,整个流程从其RecentsPanelView.java开始: public void handleSwipe(View view) { ... // ...

  8. 使用QJM部署HDFS HA集群

    一.所需软件 1. JDK版本 下载地址:http://www.oracle.com/technetwork/java/javase/index.html 版本: jdk-7u79-linux-x64 ...

  9. Import larger wordpress xml file

    The maximum size is controlled by two PHP settings: upload_max_filesize, and post_max_size. These ar ...

  10. openstack 控制节点大流量对外发包,nf_conntrack,table full droping packets

    某些人很MJJ,挂了N多代理来疯狂采集,把服务器带宽都耗尽了,没办法只好封掉一些! 目前发现的问题openStack kilo for ubuntu manuual运行一段时间后 云平台的控制节点p5 ...