java - 是否可以使用 RGB 或十六进制颜色在终端中对 Java 输出进行着色?

标签 java colors output

我正在尝试为我的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' 终止转义序列。将“”替换为 0-255 之间的数字。请参阅this article对于一些显示所有可能颜色的图表。

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/

相关文章:

Java:在对象数组中,如何提取指定子类的对象

r - scale_gradientn 中的陡峭梯度

.NET - 将颜色名称字符串转换为 System.Drawing.Color

c - 输出不维持秩序

php - 如何在 PHP mail() 中将文本设为粗体?

java - 代码在抛出 NullPointerException 时仅返回 0.0, 0.0 GPS 坐标

java - 如何查看jar文件中的源代码?

Android:更改png文件颜色的最简单方法

python - Tensorflow LSTM-Cell 的输出

java - 关于断言使能