
Hice este script para mostrar los colores del terminal, pero no entiendo la disposición de los colores.
Aquí está el guión que es bastante básico. Simplemente incrementa el código de color para la paleta de 256 colores y los organiza en filas de 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()
Lo que genera esta cuadrícula y creo que podría ser mejor.
Pero me gustaría saber cómo puedo arreglar esto de una manera más amigable para los humanos. Algo similar a esta cuadrícula a continuación, donde los colores son grados del mismo tono. ¿Existe algún proceso para hacer eso?
El objetivo de esto es poder tener una función de gradación de color que pueda aplicarse a la codificación de terminales.
Respuesta1
Según el comentario de @DavidPostill, entendí que estoy mirando capas de un bloque de color RGB. Entonces esta respuesta responde parcialmente a mi propia pregunta. Sin embargo, tuve que seleccionar los valores de cada tono en varias listas, que preferiría encapsular en una función que pudiera tomar 2 colores en el bloque y determinar los tonos intermedios.
Para visualizar el bloque de color, aquí hay un gráfico en el que etiqueté el código de color del terminal correspondiente en cada esquina.
Me di cuenta de que dibujar una línea desde cualquier número a cualquier otro número te dará un degradado de color. La esquina opuesta al blanco (231) sería la negra (16).
Al reorganizar la cuadrícula de colores del terminal de esta manera, es más fácil ver que cada capa es una porción del bloque 3D de arriba (yendo de la cara izquierda a la derecha) y ahora es obvio cómo se pueden trazar colores a lo largo y ancho de este bloque aplanado.
agregando este código a mi código original:
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)
produjo esto