ios - 从函数获取 UIImage

标签 ios swift core-image cifilter

我编写了一个将滤镜应用于照片的函数。为什么函数总是返回 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!)

输出:

enter image description here

关于ios - 从函数获取 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43560442/

相关文章:

iphone - iOS 5.0 中的 Core Image 过滤器是否足够快以进行实时视频处理?

ios - 为什么加载引导屏幕后我的 UITabBar 消失了?

ios - 还有其他人遇到 iOS 5 加密问题吗?

ios - 如何在不访问所有物理设备的情况下检查每个设备的 TestFlight beta 精简构建大小

ios - 在 UITableViewCell 的多个 AVPlayerItem 中添加和删除观察者

swift - MBProgressHUD 不同的加载方式

ios - 在 tableView 中下载图像(_ :cellForRowAt:) causing cells non-stop flashing

ios - 从 CMSampleBuffer 制作 UIImage

ios - 如何在 iOS 中初始化该协议(protocol)?

ios - CVPixelBuffer 到 CIImage 总是返回 nil