繁体   English   中英

如何在 Python 中按比例混合 colors?

[英]How can I proportionally mix colors in Python?

关于混合 colors 有很多问题,但我的问题是按比例混合 colors。 我想这就像混合油漆:一升白色加半升蓝色应该会产生非常浅的蓝色。

所以给定一个color: proportion {"white": 1.0, "blue": 0.5, "black": 0.05} ,我希望能够按比例混合 colors。 有没有办法在 Python 中做到这一点? 我知道我可以很容易地从颜色词中获取十六进制代码,但是我不确定如何组合这些十六进制代码中的值来混合 colors 一点点。

我实际上并不知道如何“轻松地从颜色词中获取十六进制代码”,但问题的 rest 很简单。 我只是假设你已经有了十六进制值。 从十六进制值中提取红色、绿色和蓝色分量,乘以比例,将它们相加,然后除以权重之和。

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'
color = (f"#{random.randrange(256):02x}{random.randrange(256):02x}{random.randrange(256):02x}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM