在iOS中应用模糊滤镜时,如何从图像中删除黑色阴影矩形?

时间:2018-08-07 15:20:00

标签: ios swift core-image cifilter ciimage

我想在应用模糊滤镜时删除图像周围的黑色阴影边框

请查看以下所附的屏幕截图。 B lur函数正常工作,但要删除黑色阴影。我只想模糊图像。我不想应用任何带有模糊的色彩效果。请让我们知道我何时应该错过...

由于低点,我在这里上传了图片:

https://drive.google.com/open?id=1KtVgqRXOmIEQXh9IMyWNAlariL0hcJBN https://drive.google.com/open?id=1l2eLq7VwFPb3-SfIokW0Ijhk2jqUvjlU

这是我对特定图像应用模糊效果的功能:

参数:

doBlurImage-主图像要使其模糊

imageBlurValue-模糊值从0到50浮动

func makeBlurImage(doBlurImage : UIImage, imageBlurValue :  CGFloat) -> UIImage {

        let beginImage = CIImage(image: doBlurImage)

        let currentFilter = CIFilter(name: "CIGaussianBlur")
        currentFilter!.setValue(beginImage, forKey: kCIInputImageKey)
        currentFilter!.setValue(imageBlurValue, 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


        return UIImage(ciImage: output!)
}

2 个答案:

答案 0 :(得分:0)

以下是在ios中生成模糊效果的可能选项:

  1. CIGaussianBlur将基于Image的背景颜色生成模糊效果。
  2. UIVisualEffectView将基于UIVisualEffectView的样式生成模糊效果。 UIVisualEffectView中的模糊效果是 .extraLight,.light,.dark,.extraDark,常规和突出显示。
  3. 建议选项-GPUIMage-您可以使用GPUImage Processing Library存档最佳模糊效果。

使用GPUImage的模糊效果:

            var resultImage = UIImage()
            let gaussianBlur = GaussianBlur()
            gaussianBlur.blurRadiusInPixels = Float(ImageBlurValue)
            let pictureInput = PictureInput(image: YourImage)
            let pictureOutput = PictureOutput()
            pictureOutput.imageAvailableCallback = {image in
                print("Process completed")

                resultImage = image
            }
            pictureInput --> gaussianBlur --> pictureOutput
            pictureInput.processImage(synchronously:true)

            pictureInput.removeAllTargets()
            return resultImage

快乐编码!...:)

答案 1 :(得分:0)

我找到了解决此问题的另一种方法。

苹果说:

在模糊滤镜之前应用钳位效果可通过使原始图像在所有方向上都不透明来避免边缘柔化。

因此,我们应该应用CIAffineClamp滤镜以避免黑色阴影,clampedToExtent()函数将返回一个新图像,该图像是通过使沿其边缘的像素颜色在所有方向上无限延伸而创建的,并且该图像已经是{{ 1}}类,这样我们就可以使用它而无需创建任何额外的功能。

所以解决方案的实现将是这样的:

CIImage

注意:创建上下文非常昂贵,然后可以在函数外部创建它。