gpt4 book ai didi

ansi-escape - ANSI 颜色特定的 RGB 序列 Bash

转载 作者:行者123 更新时间:2023-12-03 08:59:29 30 4
gpt4 key购买 nike

我知道在 bash 终端中,一种可靠的变色方法是使用 ANSI 转义序列。例如:

echo -e "\033[0;31mbrown text\033[0;00m"

应该输出
brown text (in brown)

有没有办法使用带有 ANSI 的特定 RGB 集来输出颜色?说我想要鲜红色:
echo -e "**\033[255:0:0m**red text\033[0;00m"

这种东西存在吗?

我只想使用标准的 bash。

最佳答案

这里的两个答案都没有提到 Truecolor ANSI support对于 8bpc 颜色。这将获得 OP 最初要求的 RGB 颜色。

而不是 ;5 , 使用 ;2 ,并在以下三个控制段中指定 R、G 和 B 值 (0-255)。

\x1b[38;2;40;177;249m

测试 if your terminal supports Truecolor :
printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"

在我的机器上,XTerm 愉快地输出了正确的颜色;但是,在现代 RGB 颜色之前的终端之后建模的终端通常不支持真彩色 - 在使用这种特定的转义码变体之前,请确保您了解您的目标。

我还要指出 38;5/ ;2 - 蓝冰 mentioned那个 38路线,然后 5改变颜色。这有点不正确。
38是 xterm-256 扩展前景色代码; 30 - 37只是所有 vt100/xterm 都支持的 16 色前景代码(在某些系统上,亮度由转义码 1 控制,并且可以说是受支持的 90 - 97 非标准“明亮”代码)兼容的彩色端子。
;2;5指示颜色的格式,最终告诉终端要拉多少个序列: ;5指定一个 8 位格式(如 Blue Ice 提到的)只需要 1 个控制段,和 ;2指定需要 3 个控制段的完整 24 位 RGB 格式。

这些扩展模式在技术上是“未记录的”,并且完全是实现定义的。据我所知并且可以研究,它们不受 ANSI 委员会的管辖。

对于这种倾向, 5; (256 色)格式以 16 种原始颜色(深色/浅色,即 30-37 和 90-97)作为颜色 0-15 开始。

后续的 216 种颜色 (16-231) 由 3bpc RGB 值偏移 16 形成,打包成单个值。

最后的 24 种颜色 (232-256) 是灰度,从比黑色略浅的阴影到比白色略深的阴影。一些模拟器将这些步骤解释为所有三个 channel 上从 ( 256 / 24 ) 开始的线性增量,尽管我遇到过一些似乎明确定义这些值的模拟器。

这是一个执行这种转换的 Javascript 函数,考虑到所有的灰色。
function rgbToAnsi256(r, g, b) {
// we use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (r === g && g === b) {
if (r < 8) {
return 16;
}

if (r > 248) {
return 231;
}

return Math.round(((r - 8) / 247) * 24) + 232;
}

var ansi = 16
+ (36 * Math.round(r / 255 * 5))
+ (6 * Math.round(g / 255 * 5))
+ Math.round(b / 255 * 5);

return ansi;
}

所以在某种程度上,你可以 calculate 256 ANSI 颜色从初始 RGB 值通过将它们从 8 位减少到 3 位,以便在您希望在不支持 Truecolor 的终端上以编程方式执行此操作时形成 256 位编码值。

关于ansi-escape - ANSI 颜色特定的 RGB 序列 Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682537/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com