在我的应用程序中,我有不同形状的各种图像。如树、云。 (附有示例图片)。
我想以编程方式为这些形状添加边框。就像如果图像是树那么需要突出显示树的形状。
我无法使用 callayer,因为它会将边框应用于 UIImageView。
谁能指导我如何实现这一目标?
这可以通过使用一系列 CIFilter 来实现。查看与以下步骤相对应的图像。在我的例子中基础图像是具有透明背景的彩色图像,mask是黑白的。
-
Use CIEdges
检测掩模的边缘。
-
然后通过应用磁盘最大过滤器使边缘更厚(CIMorphologyMaximum
).
-
将边框图像从黑白转换为透明白色CIMaskToAlpha
-
将原始图像覆盖在边框顶部。
完整代码如下:
let base = CIImage(cgImage: baseImage.cgImage!)
let mask = CIImage(cgImage: maskImage.cgImage!)
// 1
let edges = mask.applyingFilter("CIEdges", parameters: [
kCIInputIntensityKey: 1.0
])
// 2
let borderWidth = 0.02 * min(baseImage.size.width, baseImage.size.height)
let wideEdges = edges.applyingFilter("CIMorphologyMaximum", parameters: [
kCIInputRadiusKey: borderWidth
])
// 3
let background = wideEdges.applyingFilter("CIMaskToAlpha")
// 4
let composited = base.composited(over: background)
// Convert back to UIImage
let context = CIContext(options: nil)
let cgImageRef = context.createCGImage(composited, from: composited.extent)!
return UIImage(cgImage: cgImageRef)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)