Algorithm 根据两个字符创建均匀分布的背景色

Algorithm 根据两个字符创建均匀分布的背景色,algorithm,colors,Algorithm,Colors,我目前正在创建一个脚本,将用户的姓名首字母映射到背景色,目的是自动创建头像,如果他们自己没有设置头像的话。之后,白色首字母应该出现在一个正方形的化身上,背景颜色取决于两个角色 我希望达到以下标准: 两个有序字符总是返回相同的颜色 颜色(几乎)均匀分布在颜色空间中,具体取决于26个字母 我假设用户的首字母是均匀分布的 我的简单方法是在RGB空间中676(26^2)个字母组合与16777216(256^3)个颜色组合之间进行线性映射。但这可能不是最好的解决方案。有什么想法吗?RGB空间高度“感知

我目前正在创建一个脚本,将用户的姓名首字母映射到背景色,目的是自动创建头像,如果他们自己没有设置头像的话。之后,白色首字母应该出现在一个正方形的化身上,背景颜色取决于两个角色

我希望达到以下标准:

  • 两个有序字符总是返回相同的颜色
  • 颜色(几乎)均匀分布在颜色空间中,具体取决于26个字母
我假设用户的首字母是均匀分布的

我的简单方法是在RGB空间中676(26^2)个字母组合与16777216(256^3)个颜色组合之间进行线性映射。但这可能不是最好的解决方案。有什么想法吗?

RGB空间高度“感知不均匀”。这意味着,两种RGB颜色之间的欧几里德距离是一个可怕的指标,表明它们在人们看来会有多么不同。一个简单的例子是,我们的眼睛对绿色比蓝色更敏感,因此我们需要在蓝色RGB颜色指数上有很大的差异,才能看到与绿色相比的差异

因此,您应该研究如何将26^2点映射到感知均匀空间中的未成形3d网格中。有很多选择,因为没有人同意知觉一致性到底是什么;毕竟,这是一种生物/知觉特征,而不是精确的

但看看CIE实验室空间和CIE Luv。这两种方法中的任何一种都非常接近于你的目的:比RGB好20倍或更多

网上有很多关于从这些空间转换到RGB的好信息


需要注意的一点是:并非所有CIE实验室空间指定的颜色都可以通过计算机显示器进行渲染:光发射的物理特性限制了可能的效果。(例如,请参阅。因此,您应该将统一网格限制在实验室/Luv空间中与监视器实际可以产生的颜色相对应的部分。最简单的方法是选择一组轴对齐的框,填充大部分空间,并使用一个统一网格填充它们,该网格在所有框中总计26^2个点。计算每个框中的网格点。使用rel将26^2个初始空间点平均分割。然后使用整数算法将方框中的每个初始空间点映射到实验室空间网格点,就像您已经做的那样。

您可能会从中获得更好的提示,这更像是一个与编程相关的网站,我觉得UX设计师会有更多的话要说。谢谢您的提示,但这是p很可能这是一个算法问题,而不是与用户体验相关的问题(尽管这是为了一个好的用户体验,因为几乎所有的东西都是:-),谢谢你的回答!Lab和Luv空间还有一个优势,即颜色仅取决于两个参数:因此,将第一个字符映射到u,将第二个字符映射到v似乎是合适的,并且对于这项任务来说是足够随机的(亮度可以固定)@blacklwhite Great。但是我不确定你想完全忽略我。灰色为白色,L.粉红色->红色。等等。但无论什么方法有效……你是对的,它非常适合我的用例,但它不是我问题的答案:)