控制檯輸出顏色控制(Console 模式下的顏色顯示) 頂 原 薦

前端時間,寫了一篇 PHP 在 Console 模式下的進度顯示 ,正好最近的一個數據合併項目需要用到控制檯顏色輸出,所以就把相關的信息整理下,寫到OSC的博客中。

請注意,此篇文章中的顏色僅適用於仿真器(putty、secureCRT、XShell),以及unix終端,不適用於CMD(但依然可用於WIN下的仿真器)

簡介

輸入圖片說明

在終端或仿真器中輸入下面的代碼,並回車,預覽最直接的效果。

echo  -e "\033[1;31mI ♡  You \e[0m"

請注意,引號內的\e等同於\033\033\x1b\e效果是一樣,對應鍵盤左上角Esc鍵對應的ASCII碼(8進制);

通用的控制文本顏色的轉義序列格式如下:

CSI n1 [;n2 [;…]] m

其中CSI全稱爲“控制序列引導器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\033是你鍵盤左上角Esc鍵對應的ascii碼(八進制));

n1、n2等表示SGR參數(下面會列出一些常用的SGR參數),用於控制顏色、粗體、斜體、閃爍等文本輸出格式;m表示轉義序列結束。

顏色參數

常用顏色

格式:\033[顯示方式;前景色;背景色m

說明:
前景色            背景色           顏色
---------------------------------------
30                40              黑色
31                 41              紅色
32                42              綠色
33                43              黃色
34                44              藍色
35                45              紫紅色
36                46              青藍色
37                47              白色

顯示方式           意義
-------------------------
0                終端默認設置
1                高亮顯示
4                使用下劃線
5                閃爍
7                反白顯示
8                不可見

例子:
\033[1;31;40m    <!--1-高亮顯示 31-前景色紅色  40-背景色黑色-->
\033[0m          <!--採用終端默認設置,即取消顏色設置-->

輸入圖片說明

RGB顏色

輸入圖片說明

使用方式:

ESC[ … 38;2;<r>;<g>;<b> … m Select RGB foreground color
ESC[ … 48;2;<r>;<g>;<b> … m Select RGB background color

特別注意:此處用法需從38開始設置, 代表前景色,48 代表後景色;2 代表RGB模式,後面三位爲RGB數值。前後仍可使用SRG參數

例子:

echo  -e "\033[1;38;2;255;85;85mI ♡  You \e[0m"

附:經測試,在不是用SRG參數的情況下,可將;替換爲:但在使用SRG參數時無效。 即:echo -e "\033[38:2:255:85:85mI ♡ You \e[0m"

256色模式

輸入圖片說明

使用方式:

ESC[ … 38;5;<n> … m Select foreground color
ESC[ … 48;5;<n> … m Select background color

例子:

echo  -e "\033[1;38;5;9mI ♡  You \e[0m"

SRG控制參數

| 0  |   關閉所有格式,還原爲初始狀態 | 
| 1  |    粗體/高亮顯示                       | 
| 2  |     模糊(※)                          | 
| 3  |     斜體(※)                          | 
| 4  |     下劃線(單線)                    | 
| 5  |     閃爍(慢)                          | 
| 6  |     閃爍(快)(※)                 | 
| 7  |     交換背景色與前景色              | 
| 8  |     隱藏(伸手不見五指,啥也看不見)(※) | 

(1)其中含有(※)標註的編碼表示不是所有的終端仿真器都支持,只有少數仿真器支持。

(2)多個SGR參數可以組合使用,例如:echo -e "\x1b[31;4mRed Underline Text\e[0m"輸出紅色下劃線字體“Red Underline Text”。

(3)更多參數信息請參考“ANSI escape code”。

各語言下的控制檯顏色輸出

PHP

// hello.php
<?php
echo "\033[1;38;5;9mI ♡  You \e[0m\n";

請注意此處使用的是"而不是單引號,因爲顏色代碼需要轉義,正如echo-e一樣。

C

// hello.c
#include <stdio.h>
int main() {
    printf("\033[1;31mI ♡  You \e[0m\n");
}

編譯:gcc hello.c

運行:./a.out

C++

// hello.cpp
#include <iostream>
int main() {
    std::cout << "\033[1;31mI ♡  You \e[0m" << std::endl;
}

編譯:g++ hello.cpp

運行:./a.out

Java

// hello.java
class hello {
    public static void main(String[] args) {
       System.out.println("\033[1;31mI ♡  You \033[0m");
    }
}

注:Java中不能識別\e和\0x1b,僅可使用\033。

編譯:javac hello.java

運行:java hello

Python

# hello.py
print "\033[1;31mI ♡  You \x1b[0m"

注:python(v2.6.5)中不能識別\e,可以使用\033和\x1b。

運行:python hello.py

相關鏈接

PHP Color Class

wikipedia ANSI_escape_code

LINUX彩色的終端命令行 - 使用 ANSI 色彩代碼

Linux終端和win32控制檯文本顏色輸出

教你寫一個color日誌庫,不止有代碼還有原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章