如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?

Posted

技术标签:

【中文标题】如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?【英文标题】:How to use CIFilter sunbeamsGenerator in Swift 5 and iOS 13? 【发布时间】:2020-01-16 11:21:51 【问题描述】:

请问,有人可以为我提供 Swift 5 和 ios 13 中 CIFilter sunbeamsGenerator 的示例代码吗?

我正在尝试创建一个扩展来应用此过滤器,但我遇到了这个错误:

*** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键输入图像的键值编码。”

代码适用于模糊滤镜,但不适用于 sunbeamsGenerator

import UIKit
import CoreImage.CIFilterBuiltins

public extension UIImage 

public func withBlurFilter() -> UIImage 
       let ciImage = CIImage(image: self)!
       let filter = CIFilter.gaussianBlur()
       filter.inputImage = ciImage
       filter.radius = 30
       let vintage = ciImage.applyingFilter(filter.name)
       return vintage.uiImage()
   

    public func withSunFilter() -> UIImage 
        let ciImage = CIImage(image: self)!
        let filter = CIFilter.sunbeamsGenerator()
        let sunbeam = ciImage.applyingFilter(filter.name)
        return sunbeam.uiImage()
    


提前感谢,我是 CoreImage 的新手

【问题讨论】:

【参考方案1】:

CISunbeamsGenerator 不需要输入图像 - 它会生成阳光效果(因此得名),您可以使用它来混合其他图像。

当您调用ciImage.applyingFilter(...) 时,它会尝试将图像作为inputImage 分配给给定的过滤器。但是生成器没有该属性,因此会出现错误。

你可以这样做:

public func withSunFilter() -> UIImage 
    let ciImage = CIImage(image: self)!
    let filter = CIFilter.sunbeamsGenerator()
    let sunbeam = filter.outputImage!
    let output = sunbeam.composited(over: ciImage)
    return output.uiImage

查看parameters of CISumbeamsGenerator,看看你能用它做什么。

【讨论】:

谢谢弗兰克,我检查了,我修改并设置了一些默认值。但是我尝试了所有选项,但总是遇到同样的错误。我默认尝试了这个参数配置: let params: [String: Any] = [ "inputCenter": CIVector(cgPoint: CGPoint(x: 150, y: 150)), "inputColor": CIColor(red: 1, green: 1、蓝色:1)、“inputSunRadius”:40、“inputMaxStriationRadius”:2.58、“inputStriationStrength”:0.5、“inputStriationContrast”:1.375、“inputTime”:0] 嗯...真的是同样的错误(inputImage)?这很奇怪,因为您在不使用applyingFilter()时没有设置它。 解决了!非常感谢您的大力帮助!

以上是关于如何在 Swift 5 和 iOS 13 中使用 CIFilter sunbeamsGenerator?的主要内容,如果未能解决你的问题,请参考以下文章

当用户使用 iOS 13 Swift 5 点击推送通知时,在特定视图中打开应用程序

如何在 WKWebView swift 5 中更改字体大小?

上下文菜单选择颜色和框架大小 Swift 5 iOS 13

如何更新 Apple 地图中的路线 - iOS 13.0 中的 Xcode Swift 5?

从 PHAsset swift 5 IOS13 获取文件名

如何仅在 iOS 13.0 之前包含此 swift 声明