如何将终端颜色序列排列成人性化的颜色等级

如何将终端颜色序列排列成人性化的颜色等级

我编写了这个脚本来显示终端颜色,但我不明白颜色的排列。

这是非常基本的脚本。它只是增加 256 色调色板的颜色代码,并将它们排列成 6 行。

#!/bin/env python3

def fg(n):
    assert -1 < n < 256, f"{n} value outside (0,255)"
    return f"\x1b[38;5;{n}m"

def bg(n):
    assert -1 < n < 256, f"{n} value outside (0,255)"
    return f"\x1b[48;5;{n}m"
    
RESET = "\x1b[0m"

print("The 1st 16 colors")
for i in range(0,16):
    print(f"{fg(0)}{bg(i)}[{i:03d}]{bg(0)}" , end = RESET)

print("\nthe rest\n")
for i in range(16,255,6):
    for j in range(0,6):
        print(f"{fg(0)}{bg(i + j)}[{i + j:03d}]", end = RESET)
    print()

它输出这个网格,我认为它可能会更好。

在此处输入图片描述

但我想知道如何才能以更人性化的方式安排它。类似于下面的网格,其中颜色是相同色调的等级。有没有什么流程可以做到这一点?

在此处输入图片描述

这样做的目的是为了能够具有可应用于终端编码的色彩分级功能。

答案1

根据 @DavidPostill 的评论,我明白我正在查看 RGB 颜色块的图层。所以这个答案部分回答了我自己的问题。但是,我不得不将每种色调的值挑选到几个列表中,我宁愿将它们封装在可以采用块中的 2 种颜色并计算出两者之间的色调的函数中。

为了直观地显示颜色块,这里有一张图,我在每个角落都标注了相应的终端颜色代码。

在此处输入图片描述

我意识到从任意数字到任意数字画一条线都会产生颜色渐变。白色(231)的对角是黑色(16)。

通过这种方式重新排列终端颜色网格,可以更容易地看到每一层都是上面的 3D 块的一部分(从左面到右面),现在很明显可以知道如何在这个扁平块上绘制颜色。

在此处输入图片描述

将此代码添加到我的原始代码中:

def print_color_range(name, clist):
    rangelen = len(clist)
    fore = fg(0) # black pen
    for i in range(rangelen):
        code = clist[i]
        back = bg(clist[i])
        print(f"{fore}{back}[{clist[i]:03d}]",  end = RESET)
    print(name)

WHITE_BLACK = [231,188,145,102,59,16]
WHITE_RED_BLACK     = [231,224,217,210,203,196,160,124,88,52,16]
WHITE_BLUE_BLACK    = [231,189,147,105,63,21,20,19,18,17,16]
WHITE_GREEN_BLACK   = [231,194,157,120,83,46,40,34,28,22,16]
WHITE_CYAN_BLACK    = [231,195,159,123,87,51,44,37,30,23,16]
WHITE_MAGENTA_BLACK = [231,225,219,213,207,201,164,127,90,53,16]
WHITE_YELLOW_BLACK = [231,230,229,228,227,226,184,142,100,58,16]
GREYS = [231,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,16]

print_color_range('reds', WHITE_RED_BLACK )
print_color_range('yellows', WHITE_YELLOW_BLACK    )
print_color_range('greens', WHITE_GREEN_BLACK  )
print_color_range('cyans', WHITE_CYAN_BLACK   )
print_color_range('blues', WHITE_BLUE_BLACK   )
print_color_range('magentas', WHITE_MAGENTA_BLACK)
print_color_range('white to black', WHITE_BLACK)
print_color_range('grays', GREYS)

制作了这个

在此处输入图片描述

相关内容