繁体   English   中英

如何将滤镜应用于照片库中的选定图像,而不仅仅是硬编码的图像

[英]How do I go about applying filters to selected images from the photo library not just hardcoded ones

我正在开发一个照片应用程序,用户可以从他们照片库中的图像中进行选择,或者他们可以使用相机从应用程序内部拍摄照片。

我已经有了从任一来源获取图像的功能。 如果过滤器使用图像名称进行硬编码,我可以将过滤器应用于图像,但在选择或拍摄时则不能。

我将如何更改它以便我不需要将图像的名称硬编码到将过滤器应用于图像的部分?

这是我迄今为止关于主题方式的代码。

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    var FilterName:String?

    @IBAction func filters(_ sender: UIButton) {
        switch sender.tag {
        case 1: FilterName = "CIGaussianBlur"
        case 2: FilterName = "CIMedianFilter"
        case 3: FilterName = "CIEdges"
        default: print("No Filter Applied")
        }
        process()
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.originalImage] as? UIImage
        else
        {
            return
        }
        PhotoView.image = image
        dismiss(animated: true, completion: nil)
    }

    func process() {
        if let image = UIImage("test")
        {
            let originalImage = CIImage(image: image)
            let filter = CIFilter(name: FilterName!)
            filter?.setDefaults()
            filter?.setValue(originalImage, forKey: kCIInputImageKey)
            if let outputImage = filter?.outputImage {
                let newImage = UIImage(ciImage: outputImage)
                PhotoView.image = newImage
            }
        }
    }
}

由于您似乎想要选择一个图像,然后让用户点击多个过滤器按钮之一,因此您需要将图像选择器中的选定图像保存到类中的UIImage属性中。

然后更新您的process方法以使用该属性而不是加载硬编码图像。

将以下属性添加到您的类中:

var selectedImage: UIImage? = nil

然后更新您的图像选择器委托方法以设置此属性:

selectedImage = info[.originalImage] as? UIImage

然后更新您的process方法以使用该属性而不是加载硬编码图像:

if let image = selectedImage {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM