首先介绍一下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. Features of Spring Web MVC

    21.1.1 Features of Spring Web MVC Spring Web Flow Spring Web Flow (SWF) aims to be the best solution ...

  2. 数据结构(主席树):HZOI 2016 采花

    [题目描述] 给定一个长度为n,包含c种颜色的序列,有m个询问,每次给出两个数l,r,表示询问区间[l,r]中有多少种颜色的出现次数不少于2次. 本题强制在线,对输入的l,r进行了加密,解密方法为: ...

  3. google font和@font-face

    会使用google字体 网址: http://www.google.com/fonts/ 选择字体, quick use 引用css: <link href='http://fonts.goog ...

  4. unity3d 雪与沙的渲染

    很简单的一个shader,跟着上一篇地形顺便弄的 方法就是基于物理的diffuse,再加上noise权重的specular 公式参考 JOURNEY JOURNEY中认为OrenNayar比较浪费,所 ...

  5. duang体加班版

    领导第一次让我加班的时候,其实我是拒绝的,因为我觉着加班这个事,不能你让我加我就加,晚了就没有地铁了..领导跟我说可以打车报销.加了一个月之后,我的钱包duang~,后来我知道报销其实是假的,我每天打 ...

  6. JavaScript XML 兼容处理,序列化和反序列化以及回调事件

    浏览器中XML DOM的支持 IE中通过ActiveXObject实现了XML的支持,存在一下几个版本:Microsoft.XmlDom,MSXML2.DOMDocument,MSXML2.DOMDo ...

  7. mysql使用mysqldump导出数据出错

    mysqldump -hlocalhost -uroot -p123456 student_info jssypk  > c:/databackup.sql 导出表结构 mysqldump  - ...

  8. C++Primer第5版学习笔记(四)

    C++Primer第5版学习笔记(四) 第六章的重难点内容         你可以点击这里回顾第四/五章的内容       第六章是和函数有关的知识,函数就是命名了的代码块,可以处理不同的情况,本章内 ...

  9. java基础学习(一)

    去年10月份从学校出来实习,从事javaWeb方面的开发.到现在已经快1年了.突然间感觉自己的java基础知识忘记的很厉害,或者说知识掌握的不牢吧.回顾自己学习java,发现我竟然一本关于java基础 ...

  10. linux下配置固定ip

    今天在VM上装linux6.3,装的时候没有配置ip,虚拟机连接方式选的NAT方式,可以直接上网.我装这几次虚拟机系统只有这次虚拟机上去网了,挺爽.但是问题又出来了,就是我本机Windows远程不上虚 ...