掩模图像与其他图像和自定义颜色

时间:2017-09-04 16:27:17

标签: ios swift

我正在努力实现这样的目标 enter image description here
我已经有了这些资产

enter image description here enter image description here
我使用此代码来掩盖封面图像,但仍然没有采用颜色。所以任何人都可以帮助我?如果有必要,我可以对图像进行必要的更改。

我的代码:

let mask = UIImageView(image: mask-img)
coverImage = UIImageView(image: cover-img)
coverImage.mask = mask

这是使用此代码后的结果 enter image description here

1 个答案:

答案 0 :(得分:3)

基本上,您可以通过几种方式实现这一目标,最简单 - 使用CoreGraphics。

首先,您可以查看this user guide provided by Apple

之后,要为图像添加遮罩,您可以使用类似

的内容
func maskImage(image:UIImage, mask:UIImage) -> UIImage? {

        if let imageReference = image.cgImage,
            let maskReference = mask.cgImage,
            let dataProvider = maskReference.dataProvider {

            if let imageMask = CGImage(maskWidth: maskReference.width,
                                       height: maskReference.height,
                                       bitsPerComponent: maskReference.bitsPerComponent,
                                       bitsPerPixel: maskReference.bitsPerPixel,
                                       bytesPerRow: maskReference.bytesPerRow,
                                       provider: dataProvider, decode: nil, shouldInterpolate: true) {

                if let maskedReference = imageReference.masking(imageMask) {
                    let maskedImage = UIImage(cgImage: maskedReference)
                    return maskedImage
                }
            }
        }
        return nil
    }

为了测试目的,我准备了简单的游乐场。可用here

结果:

enter image description here

要获得彩色蒙版,您可以将色调效果应用于蒙版图像,例如使用:

private func tinted(_ image:UIImage, with color:UIColor) -> UIImage? {
    let rect:CGRect = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size)
    UIGraphicsBeginImageContextWithOptions(rect.size, false, image.scale)
    let context = UIGraphicsGetCurrentContext()!
    image.draw(in: rect)
    context.setFillColor(color.cgColor)
    context.setBlendMode(.sourceAtop)
    context.fill(rect)
    if let result:UIImage = UIGraphicsGetImageFromCurrentImageContext() {
        UIGraphicsEndImageContext()
        return result
    }
    return nil
}

演示:

enter image description here

更新了游乐场here

相关问题