You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现基于可变分段数的色轮均匀色相纯色分段?

实现径向纯色分段的均匀色相分布

嘿,这个需求很好搞定!要把原本连续渐变的径向色相改成固定分段的纯色块,核心就是把连续的角度值映射到离散的分段索引,再把索引转换成对应的色相。下面是具体的实现思路和代码:

核心思路

  1. 定义一个可配置的分段数量(比如12),我们把它作为变量num_segments,方便随时调整。
  2. 计算每个像素相对于图片中心的弧度角度,把角度范围从[-π, π]转换为[0, 2π],这样更方便计算分段。
  3. 根据角度占整个圆周的比例,计算当前像素属于第几个分段,得到离散的分段索引。
  4. 把分段索引映射为色相值(色相范围是0到1),每个分段对应一个固定的色相,这样就能生成纯色的分段效果。

修改后的完整代码

from PIL import Image
import colorsys
import math

if __name__ == "__main__":
    # 可自定义的分段数量,这里设为12段
    num_segments = 12
    im_size = 250
    im = Image.new("RGB", (im_size, im_size))
    cx, cy = im_size / 2, im_size / 2
    pix = im.load()

    for x in range(im.width):
        for y in range(im.height):
            rx = x - cx
            ry = y - cy
            # 计算当前点相对于中心的弧度角度(范围:-π 到 π)
            angle = math.atan2(ry, rx)
            # 将角度转换为 0 到 2π 的范围,方便后续计算分段
            if angle < 0:
                angle += 2 * math.pi
            # 计算当前角度所属的分段索引(从0开始)
            segment_index = int((angle / (2 * math.pi)) * num_segments)
            # 将分段索引映射为色相值(色相范围0-1)
            h = segment_index / num_segments
            # 转换为RGB颜色,饱和度和亮度设为1,保证颜色鲜艳饱和
            rgb = colorsys.hsv_to_rgb(h, 1.0, 1.0)
            # 转换为0-255的整数格式,设置像素颜色
            pix[x, y] = tuple([int(round(c * 255.0)) for c in rgb])
    
    im.show()

关键代码解释

  • 角度转换:math.atan2(ry, rx)返回的角度范围是-π到π,我们把负角度加上2π,转换成0到2π的范围,这样计算分段时不会出现负数问题。
  • 分段计算:(angle / (2 * math.pi))得到当前角度占整个圆周的比例,乘以分段数量后取整,就能得到该点所属的分段索引。
  • 色相映射:每个分段索引除以总段数,得到0到1之间的色相值,这样每个分段的色相是均匀分布的(比如12段的话,色相依次是0, 1/12, 2/12...11/12)。

你可以直接修改num_segments的值来调整分段数量,比如改成6、8或者24,都能得到对应的均匀纯色分段效果。

内容的提问来源于stack exchange,提问作者Ob1Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:32:46