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. 自然数的K次幂的数列求和

        ------------------------------------------------------------------------------- 转载请注明出处 博客园 刺猬的温 ...

  2. 安装mysql数据库中的技巧、错误排查以及实用命令(持续更新)

    针对解压版本5.7.16(博主使用的这个版本.在某些低版本中部分命令失效) 一.初始化data目录(解压版解压后没有data目录) mysqld --initialize-insecure --use ...

  3. log_reuse_wait_desc为REPLICATION,日志暴大,无法收缩

    早上检查数据发现,有一台数据的硬盘空间只剩下几MB.习惯性检查日志文件,发现日志文件居然暴增到了350多GB 首先备份日志,再收缩-------无变化.(实际上日志备份每1小时1挡,正常在跑.) -- ...

  4. elixir 高可用系列 - 目录

    1. elixir 高可用系列(一) Agent 2. elixir 高可用系列(二) GenServer 3. elixir 高可用系列(三) GenEvent 4. elixir 高可用系列(四) ...

  5. MySQL中表名大小写问题

    在设计数据表时,有自己特有的规则:英文单词的首字母大写,比如表名User, Article, UserRole, 等等,这种办法使用得很顺手习惯,在以往使用的MS SQL Server.MS Acce ...

  6. 调研一类软件的发展演变—聊天软件( 1000-2000 words, in Chinese)

    因为本人平时对聊天软件的涉及比周边其他同学而言所涉及的是比较多的.所以说想写写这个东西.(ps本文里面的具体通讯信息的时间安排不分先后) 也许最起初的通讯信息的传达是利用.烽火狼烟这一类可以远距离视觉 ...

  7. 用dom操作替代正则表达式

    在B/S结构客户端越来越“胖”的今天,作为一名全端程序员,您很可能会在前端操作html字符串,注意,是操作html字符串,不是操作当前页面的html. 举个例子,百度推出的在线HTML富文本编辑器Ue ...

  8. jpa 注解使用说明

    1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog=&quo ...

  9. 阿里云服务器PPTP VPN安装记录

    # sudo apt-get install pptpd   http://blog.kunyu.li/digitalocean-ubuntu-vps-vpn.html     iptables管理 ...

  10. OpenWrt资料汇总

    上周末折腾了一下OpenWrt,打算把Facebook的网络模拟工具部署到上面,最终以失败告终.上github看,发现已经有人给作者提了issue,作者表示部署在OpenWrt上会很有用,但确实在Op ...