ios - CIRadialGradient 减小图像尺寸

标签 ios swift xcode core-image

将 CIRadialGradient 应用到我的图像后,它的宽度减少了大约 20%。

guard let image = bgImage.image, let cgimg = image.cgImage else {
    print("imageView doesn't have an image!")
    return
}
let coreImage = CIImage(cgImage:cgimg)

guard let radialMask = CIFilter(name:"CIRadialGradient") else {
    return
}

guard let maskedVariableBlur = CIFilter(name:"CIMaskedVariableBlur") else {
    print("CIMaskedVariableBlur does not exist")
    return 
}
maskedVariableBlur.setValue(coreImage, forKey: kCIInputImageKey)

maskedVariableBlur.setValue(radialMask.outputImage, forKey: "inputMask")
guard let selectivelyFocusedCIImage = maskedVariableBlur.outputImage else {
    print("Setting maskedVariableBlur failed")
    return
}


bgImage.image = UIImage(ciImage: selectivelyFocusedCIImage)

澄清一下,bgImage 是一个 UIImageView

为什么会发生这种情况,我该如何解决?

没有 RadialMask:

enter image description here

使用径向 mask :

enter image description here

不同的是,在我的实体 iPhone 上,较小的图像向左对齐。

最佳答案

我倾向于通过使用 CIContext 并创建特定大小的 CGImage 而不是简单地使用 UIImage(ciImage:) 来明确说明图像有多大。试试这个,假设你的 inputImage 被称为 coreGraphics:

let ciCtx = CIContext()
let cgiig = ctx.createCGImage(selectivelyFocusedCIImage, from: coreImage.extent)
let uiImage = UIImage(cgImage: cgIMG!)

一些注意事项....

(1) 我从我正在打包的应用程序中提取了这段代码。这是未经测试的代码(包括强制解包),但我正在做的事情的概念是可靠的。

(2) 你没有解释很多你想做的事情,但是当我看到一个名为 selectivelyFocusedCIImage 的变量时,我担心你可能会尝试在更多的地方使用 CoreImage交互方式,而不是“仅仅”创建一个图像。如果您想要“接近实时”的性能,请在(自 iOS 12 起已弃用)GLKViewMTKView 而不是 UIImageView< 中呈现 CIImage/。后者仅使用 CPU,而前两者使用 GPU。

(3) 最后,关于 CIContexts 的警告——它们的创建成本很高!通常,您可以对其进行编码,以便只有一个上下文可以由您的应用程序中的所有内容共享。

关于ios - CIRadialGradient 减小图像尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228471/

相关文章:

ios - 从 JSON 加载信息

iOS:AVPlayerViewController View 未删除

ios - Xcode 6.3 和 6.2 问题 : Xcode cannot run using the selected device

ios - 为什么我的图像不会在 iOS 控件中更新?

iPhone App 向设备确认身份

html - 导航到下一页时 Chrome (iOS) 中的奇怪自动滚动/跳转行为

ios - IBDesignable 无法工作 Xcode 7 Swift 2(核心显卡)

ios - 防止用户每秒按下按钮 x 次

ios - 如何快速更改pdf图像颜色?

ios - 如何从 iOS 8.0 中弃用的 UISearchDisplayController 更改为 UISearchController