iOS Core Image - 入门导读

高斯模糊

简介

Core Image 是一种图像处理和分析技术,可为静态和视频图像提供高性能处理。 使用许多内置图像过滤器来处理图像并通过链接过滤器来构建复杂效果。

关于过滤器种类和效果可以查看官方文档:Core Image Filter Reference

系统内置了多种滤镜效果,你可以将多种滤镜组合使用,一般情况下的需求都可以满足。当然,你也可以自定义滤镜效果。

关于自定义了滤镜可以查看官方文档:Core Image Programming Guide

基础知识

三个重要的类

Core Image 中的图像类,类似 UIKit 中的 UIImage 类。

Core Image 中的图像过滤器,可以使用它来处理一个或者多个图像,并产生新的图像数据。

Core Image 中处理图像的上下文,可以用来渲染、分析图像。

CIContext 和 CIImage 对象是不可变的,因此多个线程可以使用同一个 CIContext 对象来呈现 CIImage 对象。但是,CIFilter 对象是可变的,因此无法在线程之间安全地共享,每个线程必须创建自己的 CIFilter 对象。

应用在过滤器中的参数类型
  • CIColor

定义了特定颜色空间。

  • CIVector

坐标值,方向矢量,矩阵和其他非标量值的容器,用于 Core Image 中的过滤器参数。

  • CIFilterShape

过滤器的边界形状和过滤操作的定义域的描述。

  • CIFormat

图像输入,输出和处理的像素数据格式。

内置过滤器的使用示例

三种过滤器

上图使用了三种过滤器组合起来实现效果:

1、使用 sepia 对带有红褐色色调的图像进行着色

2、添加 bloom 滤镜以突出显示高光

3、使用 Lanczos 比例滤镜缩小图像

接下来我们来演示一下滤镜的使用步骤。

步骤一:上下文和资源图像

  • 上下文

正像我们之前提到的,我们需要一块处理图像的上下文:CIContext ,创建该对象是非常消耗资源的,因此我们可以在应用的整个生命周期中一直持有该对象重复使用。

let context = CIContext()
  • 图像

巧妇难为无米之炊,我们还需要提供被处理的图像资源:CIImage ,该对象本身是不可显示的,你可以将其转换为 UIImage 进行显示,或者将 UIImage 转为 CIImage 对象。

let imageURL = URL(fileURLWithPath: "\(Bundle.main.bundlePath)/YourImageName.png")

// CIImage 对象
let originalCIImage = CIImage(contentsOf: imageURL)!

// 转换为 UIImage 对象显示
self.imageView.image = UIImage(ciImage:originalCIImage)

原始图片

步骤二:选择内置过滤器

内置过滤器是不可见属性的类型,我们可以使用 KVC 的形式提前给过滤器设置过滤器的相关属性,也可以在创建过滤器时指定。如果你不知道有哪些过滤器,可以查询官方文档:Core Image Filter Reference

  • 使用 Sepia 过滤器
    sepia 过滤器

系统提供了一些常见的和参数相关的key,例如 kCIInputImageKeykCIInputRadiusKey 等,如果你无法推断关联的 key,则只需使用过滤器对应参数的字符串即可。例如上图中的 inputImage 就表示 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值