【问题标题】:Python make a hue color cyclePython做一个色相颜色循环
【发布时间】:2021-02-23 22:01:03
【问题描述】:

如何在 python 中制作 RGB 颜色循环?我只需要 HSL 轮的色调值。我尝试了很多代码,但没有一个有效。我将在下面添加一个小 sn-p。

r, g, b = r/255.0, g/255.0, b/255.0
mx = max(r, g, b)
mn = min(r, g, b)
df = mx-mn
if mx == mn:
    h = 0
elif mx == r:
    h = (60 * ((g-b)/df) + 360) % 360
elif mx == g:
    h = (60 * ((b-r)/df) + 120) % 360
elif mx == b:
    h = (60 * ((r-g)/df) + 240) % 360

虽然这会返回一种色调颜色,但我需要它在所有 RGB 颜色之间循环。有没有人可以帮助解决这个问题?

【问题讨论】:

  • colorsys 是 Python 内置的,为什么不使用它呢?您只需将色调不断增加/减少的 HSV 值转换为 RGB 值。您可以将饱和度和值保留为 1 或其他任何值,并且只更改色调。
  • 如何做/处理这个?
  • 这是一个相当广泛的问题,但我可以写一个答案,其中包含我的意思的一个例子。通过rgb_to_hsvhsv_to_rgb 使用该库确实很简单。
  • 注意“色调色环/轮”(不是循环)并不代表所有颜色:颜色是 3D。通常在色轮上你有一个额外的(或几个滑块)

标签: python colors


【解决方案1】:

这是一个示例,说明如何通过调整色调来循环 R、G 和 B 值。增加num_steps使循环更慢更流畅;将其设置为高于 ~1800 不会使事情变得更顺畅。该代码完成一个完整的循环,因此您可以循环它以使其连续:

import colorsys

num_steps = 20 # arbitrary
hue = 0.0
step_val = 1.0 / num_steps
for _ in range(num_steps):
    rgb = colorsys.hsv_to_rgb(hue, 1, 1)
    hue += step_val
    hue %= 1.0 # cap hue at 1.0
    r = round(rgb[0] * 255)
    g = round(rgb[1] * 255)
    b = round(rgb[2] * 255)
    rgb_ints = (r, g, b)
    print(rgb_ints)

输出:

(255, 0, 0)
(255, 77, 0)
(255, 153, 0)
(255, 230, 0)
(204, 255, 0)
(128, 255, 0)
(51, 255, 0)
(0, 255, 25)
(0, 255, 102)
(0, 255, 178)
(0, 255, 255)
(0, 179, 255)
(0, 102, 255)
(0, 25, 255)
(51, 0, 255)
(128, 0, 255)
(204, 0, 255)
(255, 0, 229)
(255, 0, 153)
(255, 0, 76)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2014-05-05
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多