测试HSL颜色,理想情况下避免红色与绿色相邻(常见的色盲类型)

1 投票
1 回答
687 浏览
提问于 2025-04-16 09:40

受到了这个页面上最佳答案的启发,我写了一个Python程序来生成N种不同的HEX颜色。和原作者不同的是,原作者使用math.random()来生成饱和度和亮度,而我使用了三角函数,这样我可以确保每种颜色的色调、饱和度和亮度都是独一无二的。同时,我还可以编程让黄色看起来比蓝色更暗,这样在白色背景和黑色文字下对比会更好(这是我需要的效果)。
我实际使用的代码还通过RGB将HSL转换为HEX代码,这样我就可以创建网页颜色代码。
我有几个问题:

  1. 使用这个模型,我怎么才能确保红色不会和绿色相邻呢?
  2. 生成颜色代码其实挺简单的,但我怎么能方便地看到这些颜色呢?现在我得把一个比较大的文件上传到服务器,然后生成pdf/png/eps格式,再下载回来。
  3. 我可以通过测试来做到这一点,但有没有人有经验使用HSL模型生成与白色背景和黑色文字对比度最大化的颜色?蓝色有时候会让黑色文字很难看清,而黄色在白色背景上有时也不太明显……

附言:这其实不是我使用的代码,但一切都是从这里开始的。完整的Python脚本可以在这里找到。
谢谢,
亚历克斯

>>> class generate_HSL_colours():
...    def __init__( self, N, shift=0, degrees=360 ):
...        dict.__init__(self)
...        self.N = N
...        hues = [ angle for angle in xrange( shift, shift+degrees , degrees / N ) ] # Default hues from 0 --> 360
...        self.colours = generate_HSL_colours()
...    def generate_HSL_colours(self,angles):
...        colours = []
...        colour = HSLColour()
...        for angle in angles:
...            cos_value = math.cos( angle * math.pi / 360 ) ## <== in radians. Degrees == cos( angle/2 ) ; so cos_value goes from 1 to -1, and 0 <= angle < 180.
...            ## Could use sin_value too...
...            saturation = 90 - (cos_value * 10)  ## Saturation from 80 --> 100
...            luminance = 50 + (cos_value * 10)   ## Lightness from 60 --> 40
...            HSLColour.hue = hue
...            HSLColour.saturation = saturation
...            HSLColour.luminance = luminance
...            colours.append( HSLColour )
...        return colours
...
...    def __iter__(self):  ## I put this in to answer a different question (see below).
...      for colour in self.colours:
...          yield repr(colour.hue, colour.saturation, colour.lightness)
... 

__iter__函数是为这个问题写的答案。

1 个回答

1
  1. 嗯?测试一下,如果红色接近绿色就会得到另一种颜色?我不太明白这里的问题是什么。

  2. 你可以生成一个PNG文件,然后在本地打开。这可能是最简单的方法。PIL是一个很好的库,可以用来做这个。http://pypi.python.org/pypi/Pillow/

  3. 不,抱歉,我对此一无所知。

撰写回答