我只有一个日历和许多在该日历中创建事件的用户。每个用户都应该有一个独特的颜色作为他创建的所有事件的背景。
用户是无限的,但无论如何少于 ffffff(16777215) 用户。所以我只需要一种算法,为添加到日历中的每个用户创建一种独特的颜色。日历的用户越少,颜色就越不同;例如红色、绿色、蓝色、黄色,对于 4 个用户,但对于 50 个用户,颜色当然会变得更加接近。
从技术上讲,您不能使用所有颜色,这些颜色中的很大一部分会与您的设计发生冲突,更糟糕的是,另一个大范围会使顶部的文本难以阅读,除非您还应用一种算法来为每个颜色中的文本着色细胞以确保更高的对比度。此外,您需要在不同颜色之间有相当大的差异才能使它们与众不同。总的来说,对于看起来或工作不那么好的东西来说,似乎付出了太多的努力。
我建议改为给每个用户一个随机生成的图标,并在他们的事件左侧以小图标显示该图标。看到 Stack Overflow 的图标了吗?他们使用 Gravatar。Gravatar 提供多种形式的基于用户邮箱随机生成的图标,用户也可以自由创建 Gravatar 账号并上传自己的图标。我会强烈考虑这样做。您可以在不到 5 分钟的时间内实现并完成它。
就是说,如果您坚持尝试,我认为最好的方法是提出一个公式,该公式采用自动递增的用户 ID 并拆分光谱,通过划分允许的光谱自动分布尽可能广泛的颜色选择重复一半。这样,前 50 个用户的颜色变化最大,您将能够随时预测地确定每个用户的颜色,否则它将是非常随机的。
关于为文本着色以提供高对比度的算法,那是另一回事。我相信谷歌会产生一些好的结果。一个简单的方法是设置一个颜色被认为是浅色或深色的阈值,然后只测试颜色 - 如果它是浅色使用黑色字体,如果它是深色使用白色字体。阴影也有助于提高易读性。