RGB - 从特定光谱中排除颜色
我想随机生成一些文字颜色,然后把它们显示在白色背景上。问题是,很多随机生成的颜色和白色的对比效果不好。
现在我只是用这个:
r = lambda: random.randint(0, 255)
color = Color((r(),r(),r()))
有没有什么库或者算法可以排除某些RGB范围的颜色,以避免颜色混在一起?或者说,有没有办法比较两种RGB颜色,判断它们是否有对比度?
2 个回答
3
你可以用一种更直接控制颜色强度的方法来生成颜色,而不是单纯用RGB三原色。这个方法叫做色相饱和度明度(Hue Saturation Value),其中的明度(Value)就是用来控制颜色的强度的。
举个例子,如果你想要一个白色的背景,你可以保持所有的色相,但把明度限制在某个范围内。
如果最后你需要RGB颜色,可以使用Python的标准colorsys模块来把HSV转换成RGB。
4
为了让颜色和白色有好的对比,至少你的红、绿、蓝(R,G,B)中的一个颜色要偏暗。我建议选择小于128的值,随便说说就是这个意思。下面是我会怎么做:
from random import randint, shuffle
color = [randint(0, 255), randint(0, 192), randint(0, 128)]
shuffle(color)
color = Color(tuple(color))
第一行代码是从 random
这个包里导入你需要的函数,这样你就可以直接使用它们,而不需要每次都写 package.name
。
第二行代码生成了一个包含3个随机数字的列表。第一个数字是从0到255的范围,第二个数字稍微暗一点,第三个数字则是在我推荐的0到128的范围内。
第三行代码把这3个值打乱顺序,这样就不会总是让较暗的主色是蓝色。
第四行代码把这个列表转换成你可以使用的颜色。因为你的例子中提到了一个 Color
类,它需要一个元组,所以我假设你需要先把列表转换成元组。