如何在python中随着时间的推移制作出稳固的移位色调?

时间:2015-09-12 01:47:18

标签: python numpy colors tkinter hue

我正在努力创造一种随着时间的推移改变色调的固体,但我对如何做到这一点感到困惑。我目前正在尝试使用python中的Tkinter模块,但它只支持基于单词的十六进制和颜色。理想情况下,我可以调整HSV值,只需在色调中添加时间表达式,但考虑到Tkinter的颜色输入系统,似乎可能很难。我见过人们推荐使用colorsys模块,但显然处理起来很慢,我不知道它能够保持每秒移动色调~30次。

1 个答案:

答案 0 :(得分:0)

您需要先将HSL转换为RGB的方法。这是我从SO上的另一个问题找到的解决方案:

def hueToRgb(p, q, t):
    if t < 0: t += 1
    if t > 1: t -= 1
    if t < 1/6: return p + (q - p) * 6 * t
    if t < 1/2: return q
    else: return p + (q - p) * (2/3 - t) * 6 ift < 2/3 else p

def hslToRgb(h, s, l):
    r = 0
    g = 0
    b = 0

    if s == 0:
        r = g = b = l
    else:
        q = l < 0.5 ? l * (1 + s) : l + s - l * s
        p = 2 * l - q
        r = hue2rgb(p, q, h + 1/3)
        g = hue2rgb(p, q, h)
        b = hue2rgb(p, q, h - 1/3)
    return [round(r * 255), round(g * 255), round(b * 255)]

然后,要将HSL转换为有效的十六进制代码,请使用此代码(这是我自己的代码):

def hex(num):
    if num == 0: return "#"
    last = num % 16
    return hex((num - last) / 16) + "0123456789abcdef"[int(last)]

因此,您将使用此代码获取HSL代码的十六进制字符串:

rgb = hslToRgb(h, s, l)
return hex(rgb[0] * 256 + rgb[1] * 16 + rgb[0])

(请更正任何python语法错误;我不用Python编程很多)