ios - 如何更改 UIImage 的颜色
问题描述
我正在尝试更改特定 UIImage 的颜色,但是当我在互联网上搜索时,我最终得到了更改 UIImage 色调颜色的结果,如果我更改色调颜色,它将与给定颜色重叠整个图像,这不是什么我需要。有人可以帮我这样做吗?这看起来像是在 Photoshop 或草图中进行照片编辑。我在下面附上了我正在寻找的图像。
对于(例如)上面的图像,我有一个图层(UIImageView),如果我改变 OverCoat 图像的颜色,它将变成我设置的颜色。
简单地改变颜色后,它看起来像上面的样子。
有人可以帮我做到这一点。
解决方案
实现此目的的一种方法是使用遮罩图像来定义图像的哪些区域应着色:
这可以通过 来完成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()
}
推荐阅读
- r - 将第三列添加到数据框列表 R tidyverse
- python - 无法从 kivymd 库中找到一些项目
- database - 实时协作应用程序如何保存数据?
- javascript - IE 控制台错误:SCRIPT438:对象不支持属性或方法“来自”
- laravel - 如何将“前缀”和参数传递给组中的路由(Laravel 7 / 8)?
- log4net - 一起填充多个 Log4Net 模式通配符
- node.js - 将可读流播放到麦克风 - Puppeteer
- html - 手机全屏字体大小变化
- algorithm - 限制请求的算法/数据结构
- asp.net-mvc - Select2 下拉菜单不产生结果