将CIGaussianBlur应用于UIImage无法正常工作

问题描述 投票:1回答:1

我希望在滑块值改变时对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
}

该代码对于某些图像非常有效,但是对于较大的图像,在对图像应用模糊滤镜时,图像的右边缘变得透明,这是我不想要的。

[Note:我正在设备上运行它

我在这里做错什么,我不知道

The image whose right edge gets transparant

Result after applying GaussianBlur to the above image

谢谢!

ios swift uiimage gaussianblur
1个回答
0
投票

嗯,您在某处做错了。在您的职业生涯中,我能给您的绝对最佳建议是创建一个小型测试项目,以便在您遇到此类问题时进行实验-我在Apple领域已经进行了15年,这对您有很大帮助。

我创建了一个项目GaussianBlur,因此您不必(这次)。我下载了图像,将其放在ImageView中,看起来很完美(如预期)。然后,我使用了您的代码(除非我必须创建一个上下文,然后猜测半径值,然后运行它。图像看上去很完美,且模糊度为0、5、10和25。

显然,问题是您在做其他事情。我的建议是您一直添加到测试项目中,直到找到问题所在的步骤(上下文?其他图像处理?)

这是我的完整代码:

here
© www.soinside.com 2019 - 2024. All rights reserved.