首页 > 解决方案 > 如何更改 UIImage 的颜色

问题描述

我正在尝试更改特定 UIImage 的颜色,但是当我在互联网上搜索时,我最终得到了更改 UIImage 色调颜色的结果,如果我更改色调颜色,它将与给定颜色重叠整个图像,这不是什么我需要。有人可以帮我这样做吗?这看起来像是在 Photoshop 或草图中进行照片编辑。我在下面附上了我正在寻找的图像。

给定图像.

对于(例如)上面的图像,我有一个图层(UIImageView),如果我改变 OverCoat 图像的颜色,它将变成我设置的颜色。

改变颜色后

简单地改变颜色后,它看起来像上面的样子。

有人可以帮我做到这一点。

标签: iosswiftiphoneuiimageviewuiimage

解决方案


实现此目的的一种方法是使用遮罩图像来定义图像的哪些区域应着色:

用蒙版着色的图像

这可以通过 来完成UIGraphicsImageRenderer,请参阅使用蒙版为 UIImage 着色以获取示例游乐场。

import UIKit

let image = UIImage(named: "landscape.jpg")!
let mask = UIImage(named: "mask.png")!

let imageRenderer = UIGraphicsImageRenderer(size: image.size)

let tintedImage = imageRenderer.image { (ctx) in
    let cgContext = ctx.cgContext
    let rect = CGRect(origin: .zero, size: image.size)
    image.draw(in: rect)
    cgContext.saveGState()
    cgContext.translateBy(x: 0, y: rect.size.height)
    cgContext.scaleBy(x: 1.0, y: -1.0);
    cgContext.clip(to: rect, mask: mask.cgImage!)
    cgContext.setBlendMode(.color)
    UIColor.red.setFill()
    cgContext.fill(rect)
    cgContext.restoreGState()
}

推荐阅读