Как использовать CIFilter sunbeamsGenerator в Swift 5 и iOS 13? - PullRequest
0 голосов
/ 16 января 2020

Пожалуйста, кто-нибудь может предоставить мне пример кода для CIFilter sunbeamsGenerator в Swift 5 и iOS 13?

Я пытаюсь создать расширение для применения этого фильтра, и у меня появляется эта ошибка:

*** Завершение работы приложения из-за необработанного исключения 'NSUnknownKeyException', причина: '[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для ключа inputImage.'

Код работает нормально для фильтра Blur, но не для солнечных лучейГенератор

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 Ответ

0 голосов
/ 16 января 2020

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
}

Проверьте параметры CISumbeamsGenerator для посмотрим, что с этим можно сделать.

...