CIFilterKit 0.1.0

CIFilterKit 0.1.0

测试测试
Lang语言 SwiftSwift
许可证 MIT
Release最后发布2016年4月
SPM支持SPM

Jeff Blagdon 管理。



icon

CIFilterKit

要使用 Core Image,你必须创建一个 CIFilter 实例,设置适当的键值,然后获取过滤器的输出图像。

let inImg = CIImage(CGImage:someUIImage.CGImage!)
let filter = CIFilter(name:"CIGaussianBlur", withInputParameters:[kCIInputRadiusKey: 100.0, kCIInputImageKey: inImg])
let outImg = filter.outputImage

这需要做很多工作才能调用一个函数,并且随着你链式连接的滤镜越来越多,这个过程变得越来越繁琐。CIFilterKit 提供了一个功能化、可组合的包装器,可以使 Core Image 更容易使用。

安装

安装 CIFilterKit 最简单的方法是使用 CocoaPods。只需将以下内容添加到您的 Podfile 中

pod 'CIFilterKit'

注意,如果您尚未添加,请将 use_frameworks! 添加到您的 Podfile 中。

用法

Filter 是一个类型为 CIImage -> CIImage 的函数。您可以调用相应的函数创建任何可用 Core Image 滤镜的实例,其名称相当于 CIFilter(去掉“CI”)。例如,介绍中的代码变为:

let outImg = GaussianBlur(100.0)(inImg)

许多滤镜接受一个关联的 options 结构体作为参数。每个实现两个初始化器 - 一个接受结构体中每个变量的参数,另一个不接受任何参数,将它们都设置为默认值。后者提供了一种轻松设置单个值并保留其他所有默认值的方法,无需处理可选值。

let options1 = DotScreenOptions(inputCenter:XYPosition(x:150.0, y:150.0), inputAngle:1.6, inputWidth:6.0, inputSharpness:0.7)
var options2 = DotScreenOptions()
options2.inputAngle = 1.6

链式连接

可以采用 |>> 操作符将过滤器链接在一起。

let inImg = CIImage(CGImage:someUIImage.CGImage!)
let filter1 = GaussianBlur(100.0)
let filter2 = PhotoEffectChrome()
let filter3 = ColorPosterize(50.0)
let stacked: Filter = filter1 |>> filter2 |>> filter3
let outImg = stacked(inImg)

属性

我们可以通过调用 attributesForFilter 获取与过滤器关联的 attributes 字典。

let dotScreenAttributes: FilterAttributes = attributesForFilter(FilterName.DotScreen)

生成器

最后,属于 CICategoryGeneratorCICategoryGradient 的 CIFilters 不接受输入图像作为参数,因此相应的函数简单地返回输出 CIImage 而不是一个 Filter 闭包。

let aGradient: CIImage = GaussianGradient(GaussianGradientOptions())

感谢

受Chris Eidhof、Florian Kugler和Wouter Swierstra所著的《Swift函数式编程》一书中“包装核心图像”章节的启发。