我正在尝试为我的java游戏输出彩色输出,该游戏仅使用终端,我想输出彩色的东西,但使用RGB值或十六进制颜色使用精确的颜色,我该怎么办我已经看到了类似的颜色
"\u001B[0m"
但是多样性不够,我该怎么办?
最佳答案
ANSI 转义颜色代码有几种不同的变体。最古老且支持最广泛的是 3 位和 4 位颜色 discussed in other answers 。但是,该标准还有 2 个较新的修订版,提供了更多的颜色:
- 8 位(256 色)
- 24 位“真彩色”
对每种颜色范围的支持取决于您运行的终端实现。至少以下终端支持 24 位“真彩色”前景色和背景色:Xterm、KDE 的 Konsole、iTerm 和所有基于 libvte 的终端(包括 GNOME 终端)。
根据this article大约截至 2016 年 9 月 22 日,Windows 10 控制台已更新为支持“24 位 RGB 真彩色”(自 Windows 10 Insiders Build #14931 起)。该文章没有明确指出该 24 位颜色与 ANSI 兼容,但它确实提到使用“Windows Subsystem for Linux (WSL)”来运行“一些 Linux 脚本和工具来演示控制台的新 24 位颜色支持”。所以,我假设它是 ANSI 兼容的。
有关 ANSI 颜色标准的完整 Wiki 文章可以在 here 找到.
<小时/>用法:
为那些从未使用过 ANSI 转义码的人快速回顾一下。要使用 ANSI 转义序列,请将其视为字符串,并将其打印到控制台。这将更改控制台后打印的所有文本的样式。
您可以重置样式,但打印转义序列:
\033[0m
这会将所有样式重置为默认值。
Bash 脚本 4 位示例:
echo -e "\033[31mHello, World!\033[0m"
Java 示例 4 位示例:
String escapeCode = "\033[31m";
String resetCode = "\033[0m";
System.out.println(escapeCode + "Hello, World!");
System.out.println("Some more stuff I want to say.");
System.out.println(resetCode);
System.out.println("Now styling is default again.");
前言:
ANSI 转义序列以转义字符开头,但该字符可以用几种不同的方式编写,具体取决于您想要如何格式化数字。以下所有内容都是等效的:
\033
\u001B
//The character with the numeric value of 27.
//Example in Java:
char escapeChar = (char) 27;
8 位(256 色)
文本颜色(前景)
\033[38;5;__m
背景颜色
\033[48;5;__m
'm' 终止转义序列。将“__”替换为 0-255 之间的数字。请参阅the wiki换算表。
Ex (Teal - FG): \033[38;5;79m
Ex (Pink - FG): \033[38;5;207m
Ex (Teal - BG): \033[48;5;79m
Ex (Pink - BG): \033[48;5;207m
24 位“真彩色”
文本颜色(前景)
\033[38;2;<R>;<G>;<B>m
背景颜色
\033[48;2;<R>;<G>;<B>m
'm' 终止转义序列。将“
Ex (Teal - FG): \033[38;2;27;161;147m
Ex (Pink - FG): \033[38;2;255;143;184m
Ex (Teal - BG): \033[48;2;27;161;147m
Ex (Pink - BG): \033[48;2;255;143;184m
您还可以将它们组合成一个巨大的转义序列。
Ex (Pink BG & Teal FG): \033[48;2;255;143;184;38;2;27;161;147m
您还可以使用其他文本装饰,例如下划线、删除线、粗体、微弱、反转 FG 和 BG 等。请参阅 this table .
注意:在操作 8 位和 24 位颜色代码时,SGR 代码 2 和 5 会被覆盖。 例如:“38;5;”表示 8 位前景文本颜色,即使就其本身而言,“5”表示缓慢闪烁。
关于java - 是否可以使用 RGB 或十六进制颜色在终端中对 Java 输出进行着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373280/