python - 如何在 Python 中按比例混合颜色?
问题描述
关于混合颜色有很多问题,但我的问题是按比例混合颜色。我想这就像混合油漆:一升白色加半升蓝色应该会产生非常浅的蓝色。
color: proportion
所以给定一个like的字典{"white": 1.0, "blue": 0.5, "black": 0.05}
,我希望能够按比例混合颜色。有没有办法在 Python 中做到这一点?我知道我可以很容易地从颜色词中获得十六进制代码,但是我不确定如何组合这些十六进制代码中的值来混合颜色。
解决方案
我实际上并不知道如何“轻松地从颜色词中获取十六进制代码”,但剩下的问题很简单。我只是假设你已经有了十六进制值。从十六进制值中提取红色、绿色和蓝色分量,乘以比例,将它们相加,然后除以权重之和。
def combine_hex_values(d):
d_items = sorted(d.items())
tot_weight = sum(d.values())
red = int(sum([int(k[:2], 16)*v for k, v in d_items])/tot_weight)
green = int(sum([int(k[2:4], 16)*v for k, v in d_items])/tot_weight)
blue = int(sum([int(k[4:6], 16)*v for k, v in d_items])/tot_weight)
zpad = lambda x: x if len(x)==2 else '0' + x
return zpad(hex(red)[2:]) + zpad(hex(green)[2:]) + zpad(hex(blue)[2:])
>>> combine_hex_values({"ffffff": 1.0, "0000ff": 0.5, "000000": 0.05})
'a4a4f6'
>>> combine_hex_values({"ffffff": 1.0, "0000ff": 0.5, "000000": 0.5})
'7f7fbf'
>>> combine_hex_values({"ffffff": 0.05, "0000ff": 1.0, "000000": 0.05})
'0b0bf3'
推荐阅读
- c++ - 使用 HttpSendRequestA 发送 POST 失败并显示 ERROR_HTTP_HEADER_NOT_FOUND?
- javascript - 导航栏 - 单击当前部分时不关闭
- flutter - 部署在 github.pages 上的 Flutter Web 应用程序无法访问某些资产
- sql - 在 SQL 中按列计算 NULL 值
- python - TDOA计算,scipy在某个时候最小化过冲
- django - 字段“id”需要一个数字但得到“用户”
- python - for 循环中的 Jupyter 标题错误
- javascript - JavaScript 使用 map 来根据 '\n' 之类的字符划分字符串数组
- javascript - 从集合 firebase firestore 中的所有文档中获取数据
- php - 如何在php中每1秒显示1个排序比较?