如何为 swift 3 中的图像启用过滤器?

how to enable filter for Image in swift 3?

我有一个包含图像的图像视图,我想为图像添加滤镜我使用滤镜代码然后放置新图像而不是旧图像这是我的代码:

let filterNames = CIFilter.filterNames(inCategories: nil)

@IBOutlet weak var myImage: UIImageView!

@IBAction func filter1(_ sender: Any) {

    func simpleBlurFilterExample(myImage: UIImage) -> UIImage {
        // convert UIImage to CIImage
        let inputCIImage = CIImage(image: myImage)!

        // Create Blur CIFilter, and set the input image
        let blurFilter = CIFilter(name: "CIGaussianBlur")!
        blurFilter.setValue(inputCIImage, forKey: kCIInputImageKey)
        blurFilter.setValue(8, forKey: kCIInputRadiusKey)

        // Get the filtered output image and return it
        let myImage = blurFilter.outputImage!
        return UIImage(ciImage: myImage)


    }



}

正如你在这里看到的,我有一个名为我的图像的出口图像,我希望输入图像成为我的图像,在按下按钮后将图像更改为带有过滤器的输出图像

您可以使用 Storyboard 或编程方式为您的 UIImageView 设置初始图像,也许是 viewDidLoad myImage.image = UIImage(named: "yourImage")。然后使用参数 myImage.image 调用 simpleBlurFilterExample 函数并使用 return 值。

        @IBAction func filter1(_ sender: Any) {
               myImage.image = simpleBlurFilterExample(myImage: myImage.image)
        }

        func simpleBlurFilterExample(myImage: UIImage) -> UIImage {
                // convert UIImage to CIImage
                let inputCIImage = CIImage(image: myImage)!

                // Create Blur CIFilter, and set the input image
                let blurFilter = CIFilter(name: "CIGaussianBlur")!
                blurFilter.setValue(inputCIImage, forKey: kCIInputImageKey)
                blurFilter.setValue(8, forKey: kCIInputRadiusKey)

                // Get the filtered output image and return it
                let myImage = blurFilter.outputImage!
                return UIImage(ciImage: myImage)
}

您需要在UIImageView中设置图片

myImage.image = filter1(myImage: myImage.image)

也许你也应该调用 imageView myImageView 来减少混淆

您需要修改您的代码并使用正确的 CIimage 方法和正确的选项

@IBAction func filter1(_ sender: Any) {
           myImage.image = simpleBlurFilterExample(myImage: myImage.image)
    }

    func simpleBlurFilterExample(myImage: UIImage) -> UIImage {
            // convert UIImage to CIImage
            let inputCIImage = CIImage(cgImage: myImage.cgImage!)

            // Create Blur CIFilter, and set the input image
            let blurFilter = CIFilter(name: "CIGaussianBlur")
            blurFilter?.setValue(inputCIImage, forKey: kCIInputImageKey)
            blurFilter?.setValue(8, forKey: kCIInputRadiusKey)

            if let output = blurFilter?.outputImage {

              return UIImage(ciImage: output)

            }else{
              return myImage
            }

}