ターミナルのカラーシーケンスを人間が使いやすいカラーグレードにするにはどうすればよいでしょうか

ターミナルのカラーシーケンスを人間が使いやすいカラーグレードにするにはどうすればよいでしょうか

ターミナルの色を表示するためにこのスクリプトを作成しましたが、色の配置がわかりません。

これは非常に基本的なスクリプトです。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)

これを制作した

ここに画像の説明を入力してください

関連情報