我编写了一个将滤镜应用于照片的函数。为什么函数总是返回 nil?
func getImage() -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let coreImage = UIImage(cgImage: image.cgImage!)
filter.setValue(coreImage, forKey: kCIInputImageKey)
filter.setValue(1, forKey: kCIInputContrastKey)
if let outputImage = filter.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
最佳答案
当您在 iOS
中使用 coreImage
时。您必须考虑 coreImage 类,例如 CIFilter , CIContext , CIVector , 和 CIColor并且输入图像应该是保存图像数据的CIImage
。它可以从 UIImage 创建。
注意:您没有提到您使用的过滤器定义或自定义过滤器。从您的代码中,我可以看到您试图更改一个过滤器的对比度
输入图像。因此,我正在使用 CIColorControls
过滤器测试代码以调整对比度。
func getImage(inputImage: UIImage) -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let filter = CIFilter(name: "CIColorControls")
let coreImage = CIImage(image: filterImage.image!)
filter?.setValue(coreImage, forKey: kCIInputImageKey)
filter?.setValue(5, forKey: kCIInputContrastKey)
if let outputImage = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
你可以像下面这样调用上面的函数。
filterImage.image = getImage(inputImage: filterImage.image!)
输出:
关于ios - 从函数获取 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43560442/