我目前正在创建一个脚本,将用户首字母映射为背景颜色,目的是自动创建头像,如果他们没有自己设置的话。之后,白色首字母应该是一个平方的头像,背景颜色取决于两个角色。
我想满足以下条件:
我假设用户首字母是平均分配的。
我的简单方法是将676(26 ^ 2)个字母组合与RGB空间中的16777216(256 ^ 3)颜色组合进行线性映射。但它可能不是最好的解决方案。有什么想法吗?
答案 0 :(得分:2)
RGB空间高度“感知不均匀”。这意味着两种RGB颜色之间的欧几里德距离是一个可怕的指标,表明它们与人们的不同之处。一个简单的例子是我们的眼睛对绿色比蓝色更敏感,所以我们看到蓝色RGB颜色指数与绿色相比有很大不同。
因此,您应该考虑将26 ^ 2点映射到感知统一空间中的不整形3d网格。有很多选择,因为没有人同意确切的感知均匀性;毕竟,这是一种生物/感知特征,并不精确。
但是看看CIE Lab空间和CIE Luv。对于您的目的,这些中的任何一个肯定足够均匀:比RGB好20倍或更多。
网上有很多关于从这些空间到RGB的转换的好信息。
需要注意的地方:并非所有CIE Lab空间指定的颜色都可以由计算机显示器实际渲染:光发射物理限制了可能的范围。 (例如,参见the Wikepedia page on Lab color space。因此,您应该将统一网格限制为Lab / Luv空间中与显示器实际可以生成的颜色对应的部分。最简单的方法是选择一组轴对齐的框,以填充大部分空间并用一个统一的网格填充它们,在所有方框中总计26 ^ 2个点。计算每个方框中的网格点。使用相对大小均匀地分割其中的26 ^ 2个初始空间点。然后映射每个初始空间点在一个框中,用实验室空间网格点进行整数运算,就像你现在一样。