为照片添加多个效果

nik*_*212 2 uiimage cgimage ios swift

如何为图片添加多种效果?我有以下代码为照片添加效果:

func applyEffects(name: String, n: Float) {
    filter.setValue(self.cImage, forKeyPath: kCIInputImageKey)
    filter.setValue(n, forKeyPath: name)

    let result = filter.value(forKey: kCIOutputImageKey) as! CIImage
    let cgImage = CIContext.init(options: nil).createCGImage(result, from: result.extent)

    self.customImage = UIImage.init(cgImage: cgImage!)
}

func brightness(n: Float) {
    self.applyEffects(name: kCIInputBrightnessKey, n: n)
}

func contrast(n: Float) {
    self.applyEffects(name: kCIInputContrastKey, n: n)
}

func saturation(n: Float) {
    self.applyEffects(name: kCIInputSaturationKey, n: n)
}
Run Code Online (Sandbox Code Playgroud)

但是当我想要应用第二个效果时,第一个效果消失了.如何将两个或多个效果叠加在一起?

dfd*_*dfd 5

我假设你正在使用CIColorControls你的过滤器.

您需要将所有三个值传递到您的调用中:

// The documentation doesn't give a default value for contrast, but for the others, I'm setting the defaults

var brightness:Float = 1
var contrast:Float = 1
var saturation:Float = 1


func applyEffects() {

    filter.setValue(self.cImage, forKeyPath: kCIInputImageKey)
    filter.setValue(brightness, forKeyPath: kCIInputBrightnessKey)
    filter.setValue(contrast, forKeyPath: kCIInputContrastKey)
    filter.setValue(saturation, forKeyPath: kCIInputSaturationKey)

    let result = filter.value(forKey: kCIOutputImageKey) as! CIImage
    let cgImage = CIContext.init(options: nil).createCGImage(result, from: result.extent)

    self.customImage = UIImage.init(cgImage: cgImage!)

}

func brightness(n: Float) {
    brightness = n
    applyEffects()
}

func contrast(n: Float) {
    contrast = n
    applyEffects()
}

func saturation(n: Float) {
    saturation = n
    applyEffects()
}
Run Code Online (Sandbox Code Playgroud)

一条建议:

如果您尝试通过UISliders使用"实时"更新,请使用GLKView并直接发送CIImage.它使用GPU,大大提高了设备​​的性能.您始终可以创建用于保存,消息传递等的UIImage.