1.CoreImage
滤镜的使用(马赛克模糊)

CoreImage是苹果公司为了简化图片处理的难度而开发出来的类库。

随着iOS版本号升级以及硬件性能的不断提升,CoreImage将支持越来越多的滤镜

- (void)hFilter {

// 0.
导入CIImage图片

CIImage *ciImage = [[CIImagealloc] initWithImage:[UIImageimageNamed:@"demo"]];

// 1.
创建出Filter滤镜

CIFilter *filter = [CIFilterfilterWithName:@"CIPixellate"];

[filtersetValue:ciImage

forKey:kCIInputImageKey];

NSLog(@"%@", filter.attributes);

[filtersetDefaults];

CIImage *outImage = [filter valueForKey:kCIOutputImageKey];

// 2.
用CIContext将滤镜中的图片渲染出来

CIContext *context = [CIContextcontextWithOptions:nil];

CGImageRef cgImage = [context createCGImage:outImage

fromRect:[outImage extent]];

// 3.
导出图片

UIImage *showImage = [UIImageimageWithCGImage:cgImage];

CGImageRelease(cgImage);

// 4.
载入出来

UIImageView *imageView = [[UIImageViewalloc] initWithImage:showImage];

imageView.center       =self.view.center;

[self.viewaddSubview:imageView];

}

2.CoreImage
滤镜的组合

不同的滤镜能够组合在一起使用。

能够动态的改动滤镜组合中单个滤镜的參数来实现一种动态调整的效果

- (void)complexCoreImage {

// 0.
导入CIImage图片

CIImage *ciImage = [[CIImagealloc] initWithImage:[UIImageimageNamed:@"demo"]];

// 1.
创建出Filter滤镜

CIFilter *filterOne = [CIFilterfilterWithName:@"CIPixellate"];

[filterOnesetValue:ciImage

forKey:kCIInputImageKey];

[filterOnesetDefaults];

CIImage *outImage = [filterOne valueForKey:kCIOutputImageKey];

CIFilter *filterTwo = [CIFilterfilterWithName:@"CIHueAdjust"];

[filterTwosetValue:outImage

forKey:kCIInputImageKey];

[filterTwosetDefaults];

//默觉得0,不设置不能改变。能够封装一个调用

[filterTwosetValue:@(3.14)

forKey:kCIInputAngleKey];

NSLog(@"%@",filterTwo.attributes);//能够看到一些參数 key

CIImage *outputImage = [filterTwo valueForKey:kCIOutputImageKey];

// 2.
用CIContext将滤镜中的图片渲染出来

CIContext *context = [CIContextcontextWithOptions:nil];

CGImageRef cgImage = [context createCGImage:outputImage

fromRect:[outImage extent]];

// 3.
导出图片

UIImage *showImage = [UIImageimageWithCGImage:cgImage];

CGImageRelease(cgImage);

// 4.
载入出来

UIImageView *imageView = [[UIImageViewalloc] initWithImage:showImage];

imageView.center       =self.view.center;

[self.viewaddSubview:imageView];

}

3.在 OpenGLES
下进行渲染

在OpenGLES下进行滤镜的渲染能够提高效率。(GPU渲染,不占用CPU)

假设须要实时查看多个滤镜动态渲染的效果,使用OpenGLES是一个好的选择

#import <GLKit/GLKit.h>

@interface
ViewController ()

@property (nonatomic,strong)
GLKView   *glkView;// 渲染用的buffer视图

@property (nonatomic,strong)
CIFilter  *filter;

@property (nonatomic,strong)
CIImage   *ciImage;

@property (nonatomic,strong)
CIContext *ciContext;

@end

@implementation ViewController

- (void)viewDidLoad {

[superviewDidLoad];

UIImage *showImage = [UIImageimageNamed:@"demo"];

CGRect  rect       =
CGRectMake(, , showImage.size.width, showImage.size.height);

//
获取OpenGLES渲染的上下文

EAGLContext *eagContext = [[EAGLContextalloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

//
创建出渲染的buffer

_glkView = [[GLKViewalloc] initWithFrame:rect

context:eagContext];

[_glkViewbindDrawable];

[self.viewaddSubview:_glkView];

//
创建出CoreImage用的上下文

_ciContext = [CIContextcontextWithEAGLContext:eagContext

options:@{kCIContextWorkingColorSpace : [NSNullnull]}];

// CoreImage相关设置

_ciImage = [[CIImagealloc] initWithImage:showImage];

_filter = [CIFilterfilterWithName:@"CISepiaTone"];

[_filtersetValue:_ciImageforKey:kCIInputImageKey];

[_filtersetValue:@(0)forKey:kCIInputIntensityKey];

//
開始渲染

[_ciContextdrawImage:[_filteroutputImage]

inRect:CGRectMake(,, _glkView.drawableWidth,_glkView.drawableHeight)

fromRect:[_ciImageextent]];

[_glkViewdisplay];

//
动态渲染

,,
, )];

slider.minimumValue =0.f;

slider.maximumValue =1.f;

[slider addTarget:selfaction:@selector(sliderEvent:)forControlEvents:UIControlEventValueChanged];

[self.viewaddSubview:slider];

}

- (void)sliderEvent:(UISlider *)slider {

[_filtersetValue:_ciImageforKey:kCIInputImageKey];

[_filtersetValue:@(slider.value)

forKey:kCIInputIntensityKey];

//
開始渲染

[_ciContextdrawImage:[_filteroutputImage]

inRect:CGRectMake(,, _glkView.drawableWidth,_glkView.drawableHeight)

fromRect:[_ciImageextent]];

[_glkViewdisplay];

}

CoreImage 处理图片的更多相关文章

  1. [Swift通天遁地]四、网络和线程-(10)处理图片:压缩、缩放、圆角、CoreImage滤镜、缓存

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. IOS 中的CoreImage框架(framework)

    http://www.cnblogs.com/try2do-neo/p/3601546.html coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它 ...

  3. IOS 中的CoreImage框架

    IOS 中的CoreImage框架(framework) - time4cnblogs 时间 2014-03-15 00:24:00  博客园-所有随笔区原文  http://www.cnblogs. ...

  4. 基于iOS用CoreImage实现人脸识别

    2018-09-04更新: 很久没有更新文章了,工作之余花时间看了之前写的这篇文章并运行了之前写的配套Demo,通过打印人脸特征CIFaceFeature的属性,发现识别的效果并不是很好,具体说明见文 ...

  5. 使用CoreImage教程

    使用CoreImage教程 CoreImage包含有很多实用的滤镜,专业处理图片的库,为了能看到各种渲染效果,请使用如下图片素材. 现在可以开始教程了: #define FIX_IMAGE(image ...

  6. 11 (OC)* CoreImage

    coreimage framework 组成 apple 已经帮我们把image的处理分类好,来看看它的结构: 主要分为三部分: 1)定义部分:CoreImage 何CoreImageDefines. ...

  7. nodejs处理图片、CSS、JS链接

    接触Nodejs不深,看到页面上每一个链接都要写一个handler,像在页面显示图片,或者调用外部CSS.JS文件,每个链接都要写一个handler,觉得太麻烦,是否可以写个程序出来,能够自动识别图片 ...

  8. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  9. Filter Effects - 使用 CSS3 滤镜处理图片

    CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能.CSS3 Fitler 常用于调整图像的渲染.背景或边框显示效果.这里给大家分享的这个网站,大家可以体验下 CSS3 对图片的处理 ...

随机推荐

  1. 解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题

    解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题 本文的实践来源是参照了两个帖子完成的: http://dis ...

  2. bootstrap中的Tooltips工具提示的使用问题

    在使用bootstrap中的Tooltips时,官方文档中的实例代码若直接放在.container 或 .container-fluid类中时,四个button悬停之后会把button之间的margi ...

  3. SR触发器和JK触发器

    SR触发器(电平触发器) 基本RS触发器的逻辑方程为:Q(n+1)=一S+RQ(n); 约束方程:R+S=1; 根据上述两个式子得到它的四种输入与输出的关系: 1.当R端有效(0),S端无效时(1), ...

  4. kafka go producer 启动基本配置

    1.官网上下载kafka安装包:http://kafka.apache.org/downloads.html 2.执行命令运行zookeeper 实例(单点): bin/zookeeper-serve ...

  5. ftp客户端命令使用简记

    OS:windows8.1评估版 程序和功能 tftp客户端勾选上 Win+R:运行,键入cmd,键入ftp -help 如下图: 使用ftp客户端可以做的事:将文件传送到运行FTP服务器服务(经常称 ...

  6. 使用NHibernate(8)-- 延迟加载

    1,延迟加载. 延迟加载,即用到的时候再加载数据.这种机制是非常有情怀的,比如一篇中的用户实体有标签.问题等导航属性,如果只是用到用户名去查询整个实体,则把相关的标签和问题也都加载,性能会比较低.而有 ...

  7. Topshelf入门

    简介 Topshelf允许我们快速的开发.调试和部署windows服务. 官方网站 使用方法 第一步:安装 Install-Package Topshelf Install-Package Topsh ...

  8. Arcgis for Javascript 出现“init.js->TypeError: f is not a function”

    环境 采用离线JS包,版本为v3.8 问题描述 在为map添加了 app.map.on("pan-start", this.showHandBeignPan()); 在拖动地图的时 ...

  9. 用sass画蜗牛

    一.sass的好处 用css画图也算是简单的实战吧,虽然用到的东西还比较少..用过之后,发现sass主要有以下优势: 可维护性.最重要的一点,可维护性的很大一部分来自变量 嗯,最简单的例子,画图总要有 ...

  10. 在DOS下的DEBUG命令的详细用法

    在DOS下的DEBUG命令的详细用法 名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump ...