fileprivate func renderImage(image:UIImage, filterName:String) -> UIImage? {
// 1 - copy cgImage from image
let sourceImage = CIImage(cgImage: image.cgImage!)
// 2 - init filter
let filter = CIFilter(name: filterName)
filter?.setDefaults()
filter?.setValue(sourceImage, forKey: kCIInputImageKey)
if filter == nil { return nil}
// 3 - init context
let context = CIContext(options: nil)
// 4 - output filtered image
let outputCGImage = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)
if outputCGImage != nil {
return UIImage(cgImage: outputCGImage!)
} else {
return nil
}
}
還沒有看到文章介紹有什麼濾鏡可以用,不過我們可以把他們的名稱以及對應的參數印出來。
Filter Names
CIFilter.filterNames(inCategory: kCICategoryBuiltIn)
相關的參數也能通過 filter 獲得
let filter = CIFilter(name: filterName)
filter.inputKeys
filter.outputKeys
filter.attributes
有時候我們也會混合使用濾鏡,比如對一張照片同時用了棕褐色濾鏡 + 加光亮度濾鏡。