gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:42:58 24 4
gpt4 key购买 nike

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

请查看下面随附的屏幕截图。 Blur 函数正常工作但想要移除黑色阴影。我只想模糊图像。我不想应用任何带有模糊的颜色效果。请让我们知道我什么时候应该错过...

这里因为积分太低所以上传了图片:

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!)
}

最佳答案

我找到了解决这个问题的不同方法..

苹果说:

Applying a clamp effect before the blur filter avoids edge softening by making the original image opaque in all directions.

所以我们应该应用CIAffineClamp 过滤器来避免黑色阴影,clampedToExtent() 函数返回一个新图像,该图像是通过使沿其边缘的像素颜色在所有方向上无限延伸而创建的directions 并且它已经是 CIImage 类的成员,因此我们可以在不创建任何额外功能的情况下使用它。

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

fileprivate final func blurImage(image: UIImage?, blurAmount: CGFloat, completionHandler: @escaping (UIImage?) -> Void) {

guard let inputImage = image else {
print("Input image is null!")
completionHandler(nil); return
}

guard let ciImage = CIImage(image: inputImage) else {
print("Cannot create ci image from ui image!")
completionHandler(nil); return
}

let blurFilter = CIFilter(name: "CIGaussianBlur")
blurFilter?.setValue(ciImage.clampedToExtent(), forKey: kCIInputImageKey)
blurFilter?.setValue(blurAmount, forKey: kCIInputRadiusKey)

guard let openGLES3 = EAGLContext(api: .openGLES3) else {
print("Cannot create openGLES3 context!")
completionHandler(nil); return
}

let context = CIContext(eaglContext: openGLES3)

guard let ciImageResult = blurFilter?.outputImage else {
print("Cannot get output image from filter!")
completionHandler(nil); return
}

guard let resultImage = context.createCGImage(ciImageResult, from: ciImage.extent) else {
print("Cannot create output image from filtered image extent!")
completionHandler(nil); return
}

completionHandler(UIImage(cgImage: resultImage))
}

注意:上下文的创建很昂贵,因此您可以在函数之外创建它。

关于ios - 在 iOS 中应用模糊滤镜时如何从图像中删除黑色阴影矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51730267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com