golang终端色彩渲染工具库gookit/color支持16色/256色/RGB输出

Golang终端色彩渲染工具库gookit/color支持16色/256色/RGB输出

gookit/color是一个功能强大的命令行颜色库,支持16色、256色和真彩色(RGB)输出,提供统一的API方法并支持Windows环境。

基本特性

  • 简单易用,零依赖
  • 支持丰富的颜色输出:16色(4位)、256色(8位)、真彩色(24位,RGB)
  • 支持将HEX、HSL值转换为RGB颜色
  • 提供通用API方法:Print、Printf、Println、Sprint、Sprintf
  • 支持HTML标签式颜色渲染
  • 内置多种基本颜色和附加样式
  • 支持通过NO_COLOR禁用颜色或使用FORCE_COLOR强制开启颜色渲染
  • 支持RGB、256、16色之间的转换

安装

go get github.com/gookit/color

快速开始

package main

import (
	"fmt"
	"github.com/gookit/color"
)

func main() {
	// 快速使用包函数
	color.Redp("Simple to use color")
	color.Redln("Simple to use color")
	color.Greenp("Simple to use color\n")
	color.Cyanln("Simple to use color")
	color.Yellowln("Simple to use color")

	// 类似fmt.Print*的使用方式
	color.Red.Println("Simple to use color")
	color.Green.Print("Simple to use color\n")
	color.Cyan.Printf("Simple to use %s\n", "color")
	color.Yellow.Printf("Simple to use %s\n", "color")

	// 函数式使用
	red := color.FgRed.Render
	green := color.FgGreen.Render
	fmt.Printf("%s line %s library\n", red("Command"), green("color"))

	// 自定义颜色
	color.New(color.FgWhite, color.BgBlack).Println("custom color style")

	// 也可以这样:
	color.Style{color.FgCyan, color.OpBold}.Println("custom color style")

	// 内置主题/样式:
	color.Info.Tips("message")
	color.Info.Prompt("message")
	color.Info.Println("message")
	color.Warn.Println("message")
	color.Error.Println("message")

	// 使用样式标签
	color.Print("<suc>he</><comment>llo</>, <cyan>wel</><red>come</>\n")
	// 自定义标签属性:支持使用16色名称、256色值、rgb色值和hex色值
	color.Println("<fg=11aa23>he</><bg=120,35,156>llo</>, <fg=167;bg=232>wel</><fg=red>come</>")

	// 应用样式标签
	color.Tag("info").Println("info style text")

	// 提示消息
	color.Info.Prompt("prompt style message")
	color.Warn.Prompt("prompt style message")

	// 提示消息
	color.Info.Tips("tips style message")
	color.Warn.Tips("tips style message")
}

16色基本用法

color.Bold.Println("bold message")
color.Cyan.Println("yellow message")
color.Yellow.Println("yellow message")
color.Magenta.Println("yellow message")

// 仅使用前景色
color.FgCyan.Printf("Simple to use %s\n", "color")
// 仅使用背景色
color.BgRed.Printf("Simple to use %s\n", "color")

256色用法

// 设置前景或背景颜色
c := color.C256(132) // 前景色
c.Println("message")
c.Printf("format %s", "message")

c = color.C256(132, true) // 背景色
c.Println("message")
c.Printf("format %s", "message")

// 256色样式
s := color.S256(32, 203)
s.Println("message")
s.Printf("format %s", "message")

// 带选项
s = color.S256(32, 203)
s.SetOpts(color.Opts{color.OpBold})
s.Println("style with options")
s.Printf("style with %s\n", "options")

RGB/真彩色用法

color.RGB(30, 144, 255).Println("message. use RGB number")

color.HEX("#1976D2").Println("blue-darken")
color.HEX("#D50000", true).Println("red-accent. use HEX style")

color.RGBStyleFromString("213,0,0").Println("red-accent. use RGB number")
color.HEXStyle("eee", "D50000").Println("deep-purple color")

HTML标签式用法

text := `
  <mga1>gookit/color:</>
     A <green>command-line</> 
     <cyan>color library</> with <fg=167;bg=232>256-color</>
     and <fg=11aa23;op=bold>True-color</> support,
     <fg=mga;op=i>universal API</> methods
     and <cyan>Windows</> support.
`
color.Print(text)

颜色转换

basic := color.Red
basic.Println("basic color")

c256 := color.Red.C256()
c256.Println("256 color")
c256.C16().Println("basic color")

rgb := color.Red.RGB()
rgb.Println("rgb color")
rgb.C256().Println("256 color")

实用函数

func Basic2hex(val uint8) string

func Bg2Fg(val uint8) uint8
func Fg2Bg(val uint8) uint8

func C256ToRgb(val uint8) (rgb []uint8)
func C256ToRgbV1(val uint8) (rgb []uint8)

func Hex2basic(hex string, asBg ...bool) uint8
func Hex2rgb(hex string) []int
func HexToRGB(hex string) []int
func HexToRgb(hex string) (rgb []int)

func HslIntToRgb(h, s, l int) (rgb []uint8)
func HslToRgb(h, s, l float64) (rgb []uint8)
func HsvToRgb(h, s, v int) (rgb []uint8)

func Rgb2ansi(r, g, b uint8, isBg bool) uint8
func Rgb2basic(r, g, b uint8, isBg bool) uint8
func Rgb2hex(rgb []int) string
func Rgb2short(r, g, b uint8) uint8
func RgbTo256(r, g, b uint8) uint8
func RgbTo256Table() map[string]uint8
func RgbToAnsi(r, g, b uint8, isBg bool) uint8
func RgbToHex(rgb []int) string
func RgbToHsl(r, g, b uint8) []float64
func RgbToHslInt(r, g, b uint8) []int

项目截图

基本颜色预览

Windows CMD和PowerShell中的256色和RGB颜色

颜色演示


更多关于golang终端色彩渲染工具库gookit/color支持16色/256色/RGB输出的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang终端色彩渲染工具库gookit/color支持16色/256色/RGB输出的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


gookit/color - Golang终端色彩渲染工具库

gookit/color 是一个功能强大的Go语言终端色彩渲染库,支持16色、256色和RGB真彩色输出。它提供了简单易用的API来为终端输出添加丰富的颜色和样式。

主要特性

  1. 支持16色、256色和RGB真彩色输出
  2. 跨平台兼容(Windows/Linux/macOS)
  3. 提供多种样式:加粗、斜体、下划线等
  4. 链式调用API设计
  5. 支持颜色标签解析

安装

go get github.com/gookit/color

基本使用示例

16色基本使用

package main

import (
	"github.com/gookit/color"
)

func main() {
	// 基本颜色输出
	color.Red.Println("这是红色文字")
	color.Green.Println("这是绿色文字")
	color.Blue.Println("这是蓝色文字")
	
	// 自定义样式
	color.New(color.FgWhite, color.BgBlack, color.OpBold).Println("白字黑底加粗")
	
	// 链式调用
	color.Style{color.FgCyan, color.OpUnderscore}.Println("青色带下划线")
	
	// 直接使用颜色代码
	color.FgCyan.Printf("使用FgCyan打印\n")
	color.BgYellow.Printf("使用BgYellow打印\n")
}

256色使用

func demo256Colors() {
	// 使用256色前景色
	color.C256(42).Println("这是256色中的42号颜色")
	
	// 使用256色背景色
	color.C256(201, true).Println("这是256色中的201号背景色")
	
	// 组合使用
	color.Style{
		color.C256Fg(45),  // 前景色
		color.C256Bg(198), // 背景色
		color.OpBold,      // 加粗
	}.Println("45号前景色和198号背景色加粗")
}

RGB真彩色使用

func demoRGBColors() {
	// RGB前景色
	color.RGB(255, 0, 0).Println("红色文字")
	
	// RGB背景色
	color.RGBStyle{
		Foreground: color.RGB(0, 255, 0), // 绿色前景
		Background: color.RGB(0, 0, 255), // 蓝色背景
	}.Println("绿色文字蓝色背景")
	
	// 直接使用16进制颜色码
	color.HEX("#ff0000").Println("红色文字(HEX)")
	color.HEXStyle("#ff0000", "#0000ff").Println("红字蓝底(HEX)")
}

标签解析

gookit/color支持类似HTML标签的语法来定义颜色:

func demoTagParser() {
	// 启用颜色标签解析
	color.Enable = true
	
	// 使用标签定义颜色
	color.Printf("<fg=yellow;bg=blue;op=bold>黄字蓝底加粗</>\n")
	color.Printf("<fg=#ff0000>红色文字</>\n")
	color.Printf("<fg=124>256色124号颜色</>\n")
	
	// 也可以使用Println
	color.Println("<fg=green>绿色文字</>")
}

高级功能

自定义主题

func demoTheme() {
	// 定义主题
	myTheme := color.Style{
		color.FgGreen,
		color.BgWhite,
		color.OpBold,
	}
	
	// 使用主题
	myTheme.Println("自定义主题输出")
	
	// 修改主题
	myTheme.Add(color.OpUnderscore)
	myTheme.Println("添加下划线后的主题")
}

禁用/启用颜色

func demoEnableDisable() {
	// 临时禁用颜色
	color.Disable()
	color.Red.Println("这行不会显示红色") // 无颜色输出
	
	// 重新启用颜色
	color.Enable()
	color.Green.Println("这行会显示绿色")
}

注意事项

  1. 在Windows上需要调用color.Enable = true来启用颜色支持
  2. 某些终端可能不支持所有颜色和样式,特别是旧版Windows终端
  3. 可以通过环境变量NO_COLOR或调用color.Disable()来全局禁用颜色输出

gookit/color库提供了丰富的终端颜色控制功能,可以轻松创建美观的命令行界面输出。无论是简单的颜色标记还是复杂的RGB真彩色输出,都能满足开发者的需求。

回到顶部