首先介绍一下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. PL/SQL游标使用

    游标是用来处理使用SELECT语句从数据库中检索到的多行记录的工具.借助游标的功能,数据库应用程序可以对一组记录逐个进行处理,每次处理一行. 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中 ...

  2. Linux Shell编程(19)——测试与分支

    case和select结构在技术上说不是循环,因为它们并不对可执行的代码块进行迭代.但是和循环相似的是,它们也依靠在代码块的顶部或底部的条件判断来决定程序的分支.在代码块中控制程序分支case (in ...

  3. Bitmap 与Drawable相互转换

    Drawable 转 Bitmap import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import ...

  4. Android应用连接代理服务器状况监测解决

    最近项目里面有这样一个需求,由于项目涉密需要连接VPN通过网址映射去登录内部服务器,而且要通知客户vpn的连接状态.网上有许多类似的连接VPN的解决方案,我也尝试了很多种,下面先列出一种比较靠谱的方式 ...

  5. HDU-4927 Series 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4927 同学用java写的大整数相减 Series 1 Time Limit: 2000/1000 MS (Jav ...

  6. 宝洁HR

    宝洁HR系统的测试犯了很多错误 1 最基本也是最弱智的错误:测试根本不仔细,多轮测试后仍然会发现前几轮应该发现的bug. 纠结测试不仔细的原因 a 个人工作坏习惯  老是认为理所当然,对于一些内容,总 ...

  7. Performance Optimization (2)

    DesktopGood performance is critical to the success of many games. Below are some simple guidelines f ...

  8. Hibernate(七)多对一单向关联映射

    上次的博文Hibernate从入门到精通(六)一对一双向关联映射中我们介绍了一下一对一双向关联映射,本 次博文我们讲解一下多对一关联映射 多对一单向关联映射 多对一关联映射与一对一关联映射类 似,只是 ...

  9. centos6.5建立cloudera-cdh4.6本地源

    1.准备:      centos6.5系统,root用户 2.安装所需包:      sudo yum install yum-utils createrepo 3.下载cdh4.6的repo:   ...

  10. JetBrains发布了一款免费的.NET反编译器dotPeek

    Free .NET decompiler :: JetBrains dotPeek 主要的功能: Decompiling .NET 1.0-4.5 assemblies to C# Exporting ...