如何将RGB颜色打印到终端

Lup*_*ian 4 python terminal ansi-escape

ANSI 转义码 SGR 38 - 使用参数 2;r;g;b 设置前景色可以与打印功能一起使用吗?代码 33 的使用示例当然是

OKBLUE = '\033[94m'

Run Code Online (Sandbox Code Playgroud)

我想使用 038 来代替,以便能够使用任何 RGB 颜色。这可能吗?

我试过

GREEN = '\038[2;0;153;0m'
ENDC = '\033[0m'
    
print(f"{GREEN} some text {ENDC}")

Run Code Online (Sandbox Code Playgroud)

预计将“某些文本”的颜色更改为绿色

S3D*_*DEV 6

要在终端*内使用 RGB 颜色空间,可以使用以下转义序列:

# Print Hello! in lime green text.
print('\033[38;2;146;255;12mHello!\033[0m')
#           ^
#           |
#           \ The 38 goes here, to indicate a foreground colour.

# Print Hello! in white text on a fuschia background.
print('\033[48;2;246;45;112mHello!\033[0m') 
Run Code Online (Sandbox Code Playgroud)

解释:

\033[38;2;146;255;12mHello!\033[0m
^     ^ ^  ^   ^   ^   ^     ^   ^ 
|     | |  R   G   B   |     |   |
|     | |  |           |     |   \ Reset the colour to default
|     | |  |           |     | 
|     | |  |           |     \ Escape character
|     | |  |           |
|     | |  \ R;G;B     \ Text to print
|     | |
|     | \ Indicate the following sequence is RGB
|     |
|     \ Code to instruct the setting of an 8 or 24-bit foreground (text) colour
|
\ Escape character
Run Code Online (Sandbox Code Playgroud)

使用 表示38;2遵循 RGB(前景)序列。但是,使用38;5表示以下(前景)值来自256 色表

为了澄清看似误解的内容,\033(八进制)或\x1b(十六进制)对应于 ASCII 表的ESC 字符,此处使用它来引入终端文本着色的转义序列。而 则38用于指示将以下 8 位或 24 位颜色设置为前景引入转义序列之后)。此外,48还可用于设置背景颜色,如上面的代码示例所示。

*假设终端仿真器支持 24 位颜色序列。(例如 Xterm、GNOME 终端等)

链接到Wikipedia 文章,该文章更深入地解释了 24 色 (RGB) 这个主题。