如何为图片添加多种效果?我有以下代码为照片添加效果:
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)
}
但是当我想要应用第二个效果时,第一个效果消失了。如何将两个或多个效果叠加在一起?
答案 0 :(得分: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()
}
建议:
如果您正在尝试使用"实时"通过UISliders更新,使用GLKView并直接发送CIImage。它使用GPU,大大提高了设备的性能。您始终可以创建用于保存,消息传递等的UIImage。