- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个不透明的图像和一个不透明的蒙版图像。使用 MetalPetal
和它的 MTIBlendWithMaskFilter
我可以创建一个输出图像,它正确地掩盖了输入图像,但它是不透明的黑色背景。
我希望输出图像有一个 alpha channel ,例如用透明像素代替黑色像素。
func mt_blend(image: UIImage, with mask: UIImage) -> UIImage {
let ciMaskImage = CIImage(cgImage: mask.cgImage!)
let mtiMaskImage = MTIImage(ciImage: ciMaskImage, isOpaque: true)
let mtiMask = MTIMask(content: mtiMaskImage)
let ciImage = CIImage(cgImage: image.cgImage!)
let mtiImage = MTIImage(ciImage: ciImage, isOpaque: true)
let contextOptions = MTIContextOptions()
let context = try! MTIContext(device: MTLCreateSystemDefaultDevice()!, options: contextOptions)
let blendFilter = MTIBlendWithMaskFilter()
blendFilter.inputMask = mtiMask
blendFilter.inputBackgroundImage = mtiMaskImage
blendFilter.inputImage = mtiImage
let outputImage = try! context.makeCGImage(from: blendFilter.outputImage!)
return UIImage(cgImage: outputImage)
}
问题似乎是我对 premultiplyingAlpha 的误解或误用。
输入图片:
蒙版图片:
输出图像:
最佳答案
您将混合滤镜的 backgroundImage 设置为 mask 不透明的图像。要获得透明背景,请将 backgroundImage 设置为透明颜色。
blendFilter.inputBackgroundImage = MTIImage.init(color: MTIColor.clear, sRGB: false, size: mtiImage.size)
MTIBlendWithMaskFilter
的输出图像尺寸将等于 inputBackgroundImage
的尺寸。根据需要设置大小。
关于ios - 如何使用 MetalPetal 遮盖图像并以透明方式输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64218840/
我一直在尝试实现 this answer来自 this question使用 swift 5.2我只看到模糊的图像,并且没有出现 mask 。有人可以指出我在那里缺少什么或如何将它从 Swift 3
如果我将 cornerRadius 属性设置为我想要 mask 的图层,我只能设法做到这一点。 我正在努力实现: 整个蓝色的 UIView。 全背景为红色的 CALayer。 maskLayer,比第
我试图在两侧使用几个绝对定位的覆盖 div 来淡出边缘的 div 内容。但是,我需要页面的背景在淡入淡出完成后始终可见 - 使用另外 2 个具有线性“淡入淡出”渐变的 div 有效地掩盖了一个内容。请
我是一名优秀的程序员,十分优秀!