Я хочу, чтобы эффект размытия был UIImage
при изменении значения ползунка.
Я использую фильтр CIGaussianBlur
, чтобы размыть изображение.
Код выглядит следующим образом
func applyBlurFilter(aCIImage: CIImage, val: CGFloat) -> UIImage {
let clampFilter = CIFilter(name: "CIAffineClamp")
clampFilter?.setDefaults()
clampFilter?.setValue(aCIImage, forKey: kCIInputImageKey)
let blurFilter = CIFilter(name: "CIGaussianBlur")
blurFilter?.setValue(clampFilter?.outputImage, forKey: kCIInputImageKey)
blurFilter?.setValue(val, forKey: kCIInputRadiusKey)
let rect = aCIImage.extent
if let output = blurFilter?.outputImage {
if let cgimg = self.context.createCGImage(output, from: rect) {
let processedImage = UIImage(cgImage: cgimg)
return processedImage
}
}
return image ?? self.image
}
Примечание. Я также попробовал приведенный ниже код, используя фильтр CICrop
.
func applyBlurFilter(beginImage: CIImage, value: Float) -> UIImage? {
let currentFilter = CIFilter(name: "CIGaussianBlur")
currentFilter?.setValue(beginImage, forKey: kCIInputImageKey)
currentFilter?.setValue(value, forKey: kCIInputRadiusKey)
let cropFilter = CIFilter(name: "CICrop")
cropFilter?.setValue(currentFilter!.outputImage, forKey: kCIInputImageKey)
cropFilter?.setValue(CIVector(cgRect: beginImage!.extent), forKey: "inputRectangle")
let output = cropFilter?.outputImage
let context = CIContext(options: nil)
let cgimg = self.context.createCGImage(output!, from: beginImage!.extent)
let processedImage = UIImage(cgImage: cgimg!)
return processedImage
}
Код отлично работает с некоторыми изображениями, но с большими изображениями при применении фильтра размытия к изображению правые края изображения становятся прозрачными, чего я не хочу.
Примечание. Я запускаю это на устройстве
Что я делаю не так, я понятия не имею
Изображение, правый край которого становится прозрачным
Результат после применения GaussianBlur
к изображению выше
Спасибо!!
aCIImage.clampedToExtent
в качестве входных данных для фильтра Гаусса? Теоретически он делает то же самое, что иCIAffineClamp
-Фильтр, но кто знает. - person Paul Schröder   schedule 03.02.2020