给图片增加滤镜有这两种方式: CoreImage / openGLES

下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤:

#1.导入CIImage格式的原始图片

#2.创建CIFilter滤镜

#3.用CIContext将滤镜中的图片渲染出来

#4.导出渲染后的图片

参考代码:

   //导入CIImage
CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua"]]; //创建出Filter滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setDefaults]; CIImage *outImage = [filter valueForKey:kCIOutputImageKey]; //用CIContext将滤镜中的图片渲染出来
CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgImage = [context createCGImage:outImage
fromRect:[outImage extent]]; //导出图片
UIImage *showImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); UIImageView *imageView = [[UIImageView alloc] initWithImage:showImage];
imageView.center = self.view.center;
[self.view addSubview:imageView];

滤镜有哪些可选可以参看以下文章:http://www.jianshu.com/p/3e2cca585ccc

当要设置多个滤镜的时候, 出了新创建一个CIFilter外还要额外设定kCIInputAngleKey, 代码如下:

 //导入CIImage
CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua.jpeg"]]; //创建出Filter滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setDefaults]; CIImage *outImage = [filter valueForKey:kCIOutputImageKey]; CIFilter *filterTwo = [CIFilter filterWithName:@"CIHueAdjust"]; [filterTwo setValue:outImage forKey:kCIInputImageKey]; [filterTwo setDefaults]; [filterTwo setValue:@(1.0f) forKey:kCIInputAngleKey]; //如果不增加这行新增的滤镜不会生效 CIImage *outputImage = [filterTwo valueForKey:kCIOutputImageKey]; //用CIContext将滤镜中的图片渲染出来
CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgImage = [context createCGImage:outputImage
fromRect:[outputImage extent]]; //导出图片
UIImage *showImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); UIImageView *imageView = [[UIImageView alloc] initWithImage:showImage];
imageView.center = self.view.center;
[self.view addSubview:imageView];

下面来介绍怎么用openGLES来使用滤镜渲染图片

使用openGlES的步骤大致如下:

#1.导入要渲染的图片

#2.获取OpenGLES渲染的上下文

#3.创建出渲染的GLKView buffer

#4.创建CoreImage的上下文

#5.进行CoreImage的相关设置

#6.开始渲染并显示图片

参考代码如下:

 //导入要渲染的图片
UIImage *showImage = [UIImage imageNamed:@"hua.jpeg"];
CGRect rect = CGRectMake(, , showImage.size.width, showImage.size.height); //获取OpenGLES渲染的上下文
EAGLContext *eagContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; //创建出渲染的buffer
GLKView *glkView = [[GLKView alloc] initWithFrame:rect
context:eagContext];
[glkView bindDrawable];
[self.view addSubview:glkView]; //创建出CoreImage的上下文
CIContext *ciContext = [CIContext contextWithEAGLContext:eagContext
options:@{kCIContextWorkingColorSpace: [NSNull null]}]; //CoreImage相关设置
CIImage *ciImage = [[CIImage alloc] initWithImage:showImage]; CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"]; [filter setValue:ciImage forKey:kCIInputImageKey];
[filter setValue:@() forKey:kCIInputIntensityKey]; //开始渲染
[ciContext drawImage:[filter valueForKey:kCIOutputImageKey]
inRect:CGRectMake(, , glkView.drawableWidth, glkView.drawableHeight)
fromRect:[ciImage extent]]; [glkView display];

如果要动态渲染, 可以通过UISilder动态调整一下代码的vaule值

[filter setValue:vaule forKey:kCIInputIntensityKey];

iOS给图片添加滤镜&使用openGLES动态渲染图片的更多相关文章

  1. django在style的样式image url添加静态图片路径和django如何动态传入图片链接?

    #django在style的样式image url添加静态图片路径 style=" background:url({% static "agribusiness/images/lo ...

  2. JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案

    这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...

  3. asp .net 为图片添加文字水印(内包含有加图片水印的方法) .

    在项目中先创建一个Imag_writer 类库 在该类库下分别创建两个枚举类型WaterMarkType (水印的类型).WaterMarkPosition (水印的位置).代码如下: using S ...

  4. 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

    在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...

  5. 使用AS3.0代码实现给图片添加滤镜的模糊与斜角效果

    滤镜可应用于任何显示对象(即,从 DisplayObject 类继承的对象), 例如 MovieClip.SimpleButton.TextField 和 Video 对象,以及 BitmapData ...

  6. AS3.0:给图片添加滤镜模糊与斜角效果

    滤镜可应用于任何显示对象(即,从 DisplayObject 类继承的对象), 例如 MovieClip.SimpleButton.TextField 和 Video 对象,以及 BitmapData ...

  7. android图像处理系列之六-- 给图片添加边框(下)-图片叠加

    前面介绍了一种用透明图片叠加的方式添加花边边框,下面将介绍另外一种图片叠加添加花边边框的方式.前面方法有一个缺点,就是做成PNG图片,图片体积会很大,不是一般的大,比同样的JPG大三倍多,如果项目可以 ...

  8. android图像处理系列之六--给图片添加边框(下)-图片叠加

    前面介绍了一种用透明图片叠加的方式添加花边边框,下面将介绍另外一种图片叠加添加花边边框的方式.前面方法有一个缺点,就是做成PNG图片,图片体积会很大,不是一般的大,比同样的JPG大三倍多,如果项目可以 ...

  9. vue动态渲染图片,引用路径需要注意的地方

    1.把图片放在和src同级的static里面,这用按照正常的方式进行引入,例如: 2.图片可以在其他文件夹,但是在script引入是必须加上require <img :src="ite ...

随机推荐

  1. 日志——JSON的相关方法

    http://www.cnblogs.com/henryxu/archive/2013/03/10/2952738.html JSON  jar包: commons-lang.jar commons- ...

  2. html5表单验证

    表单验证为终端用户检测无效的数据并标记这些错误,是一种用户体验的优化. 下面展现浏览器自带的验证功能也可在移动端中查看: HTML部分: <!DOCTYPE html> <html ...

  3. Java中实现PHP中的urlencode与rawurlencode

    php手册中对urlencode这样说明 在java中 URLEncoder做了这样注释 也就是说java中对星号"*"是不进行编码的 也就是说URLEncoder之后还是&quo ...

  4. 区间型DP

    区间型DP是一类经典的动态规划问题,主要特征是可以先将大区间拆分成小区间求解最后由小区间的解得到大区间的解. 有三道例题 一.石子合并 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆. ...

  5. angularjs的四大特征

    angularjs四大特性: 1.MVC模式: Model:数据,其实就是angular变量($scope.XX,$rootScope.XX); View:数据的呈现,Html+Directive(指 ...

  6. 狗扑论坛 自动刷取VIP狗粮

    狗扑论坛 自动刷取VIP狗粮 开始闲狗粮回复太慢就自己想了想去写一个,成功总是给我的哈哈. 自己花了一小时 时间慢慢学就慢慢写的  虽然代码简单 但是已经够自己用了 using System; usi ...

  7. spring自动装配

    spring提供了自动装配(autowiring)和自动检测(autodiscovery)用来减少XML的配置数量. 自动装配bean属性 byName——把与Bean的属性具有相同名字(或ID)的其 ...

  8. git 笔记

    查看某个提交的修改:git show commitID 查看某个提交修改涉及的文件:git show commitID --oneline --name-status 清理掉没有入库的文件,并把修改了 ...

  9. getline函数彻底说明

    因为之前每次使用这个函数都要在网上查一遍,觉得很麻烦,这次就认真地整理一下,希望写完之后就记住. getline函数其实有两个: 一个是全局函数,include<cstring>, 原型是 ...

  10. UITableViewCell和UITableView的学习

    一:自定义UITableViewCell: 先来看UITableView.h: - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSS ...