【问题标题】:Image from CIFilter wont display来自 CIFilter 的图像不会显示
【发布时间】:2024-05-21 13:15:02
【问题描述】:

我正在拍摄子视图的快照并将其转换为图像:

let image = UIImage(view: swiftyDraw)
let scaledImage = scaleImage(image: image, toSize: CGSize(width: 28, height:28))

finalImage 是 UIImageView 并将其设置为显示 scaledImage 作品,我可以看到它很好:

finalImage.image = scaledImage //this works

但是,我想在显示之前反转颜色:

let filter = CIFilter(name: "CIColorInvert")
filter!.setValue(CIImage(image: scaledImage), forKey: kCIInputImageKey)
let invertedImage = UIImage(ciImage: filter!.outputImage!)
finalImage.image = invertedImage //this does not work

将finalImage.image 设置为invertedImage 时没有任何显示,但设置为scaledImage 时显示正常。

编辑:scaleImage函数:

func scaleImage (image: UIImage, toSize size:CGSize) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(size, false, 1.0)
    image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
}

【问题讨论】:

    标签: swift cifilter ciimage


    【解决方案1】:

    假设您的“scaledImage”是UIImage,那么您可以直接获得CIImage,而无需创建新的。

    guard let ciImage = scaledImage.ciImage, let filter = CIFilter(name: "CIColorInvert") else {
        fatalError("CIImage conversion fail")
    }
    //Now access the CIFilter object to filter the image
    filter.setValue(ciImage, forKey: kCIInputImageKey)
    finalImage.image = UIImage(ciImage: filter.outputImage!)
    

    更新

    如果您是fatalError,则意味着UIImageCIImage 不存在,因此您需要将UIImage 转换为CIImage

    extension UIImage {
        var toCIImage: CIImage {
            return self.CIImage ?? CIImage(CGImage: self.CGImage!)
        }
    }
    
    guard let filter = CIFilter(name: "CIColorInvert") else {
        fatalError("CIImage conversion fail")
    }
    
    let ciImage = scaledImage.toCIImage
    //Now access the CIFilter object to filter the image
    filter.setValue(ciImage, forKey: kCIInputImageKey)
    finalImage.image = UIImage(ciImage: filter.outputImage!)
    

    【讨论】:

    • 谢谢,我收到线程 1:致命错误:CIImage 转换失败我用 scaleImage 的内容更新了问题,应该返回 UIImage
    • 谢谢,它的工作,我还发现背景不包括在内,所以它把我的黑色笔触反转为白色并显示在白色背景上。因此,即使您的代码有效,但在我更改颜色之前它是不可见的。感谢您的帮助!
    最近更新 更多