golang实现Python webcolors颜色库功能的插件库go-webcolors的使用

go-webcolors - Golang实现的Python webcolors颜色库功能

介绍

go-webcolors是一个用于处理HTML和CSS规范中定义的颜色名称和颜色值格式的库,适用于Web文档开发。该库是从Python的webcolors库移植到Golang的版本,提供了所有原始功能。

功能支持

  • 规范定义的颜色名称
  • 六位十六进制颜色值
  • 三位十六进制颜色值
  • 整数rgb三元组
  • 百分比rgb三元组

安装

go get github.com/jyotiska/go-webcolors

使用示例

1. 颜色名称转换

package main

import (
	"fmt"
	"github.com/jyotiska/go-webcolors"
)

func main() {
	// 将颜色名称转换为RGB值
	rgb, err := webcolors.NameToRGB("red")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Red in RGB: %v\n", rgb) // 输出: Red in RGB: {255 0 0}

	// 将RGB值转换为颜色名称
	name, err := webcolors.RGBToName(rgb)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("RGB {255, 0, 0} is: %s\n", name) // 输出: RGB {255, 0, 0} is: red
}

2. 十六进制颜色转换

package main

import (
	"fmt"
	"github.com/jyotiska/go-webcolors"
)

func main() {
	// 将十六进制颜色转换为RGB
	hex := "#ff0000"
	rgb, err := webcolors.HexToRGB(hex)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("%s in RGB: %v\n", hex, rgb) // 输出: #ff0000 in RGB: {255 0 0}

	// 将RGB转换为十六进制颜色
	hexColor := webcolors.RGBToHex(rgb)
	fmt.Printf("RGB {255, 0, 0} in hex: %s\n", hexColor) // 输出: RGB {255, 0, 0} in hex: #ff0000
}

3. 整数和百分比RGB转换

package main

import (
	"fmt"
	"github.com/jyotiska/go-webcolors"
)

func main() {
	// 整数RGB转换为百分比RGB
	intRGB := webcolors.RGB{255, 0, 0}
	percentRGB := webcolors.IntegerRGBToPercentRGB(intRGB)
	fmt.Printf("Integer RGB %v to percent: %v\n", intRGB, percentRGB) 
	// 输出: Integer RGB {255 0 0} to percent: {100 0 0}

	// 百分比RGB转换为整数RGB
	intRGB2 := webcolors.PercentRGBToIntegerRGB(percentRGB)
	fmt.Printf("Percent RGB %v to integer: %v\n", percentRGB, intRGB2)
	// 输出: Percent RGB {100 0 0} to integer: {255 0 0}
}

4. 规范化颜色输入

package main

import (
	"fmt"
	"github.com/jyotiska/go-webcolors"
)

func main() {
	// 规范化十六进制颜色
	hex := "ff0000"
	normalizedHex, err := webcolors.NormalizeHex(hex)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Normalized %s: %s\n", hex, normalizedHex) // 输出: Normalized ff0000: #ff0000

	// 规范化RGB值
	rgb := webcolors.RGB{300, -10, 127} // 超出范围的值
	normalizedRGB := webcolors.NormalizeIntegerRGB(rgb)
	fmt.Printf("Normalized RGB %v: %v\n", rgb, normalizedRGB) 
	// 输出: Normalized RGB {300 -10 127}: {255 0 127}
}

错误处理

package main

import (
	"fmt"
	"github.com/jyotiska/go-webcolors"
)

func main() {
	// 尝试转换不存在的颜色名称
	_, err := webcolors.NameToRGB("notacolor")
	if err != nil {
		fmt.Println("Error:", err) // 输出: Error: Color notacolor not found
	}

	// 尝试转换无效的十六进制值
	_, err = webcolors.HexToRGB("#zzzzzz")
	if err != nil {
		fmt.Println("Error:", err) // 输出: Error: Invalid hex color #zzzzzz
	}
}

总结

go-webcolors提供了完整的颜色转换功能,可以方便地在Golang项目中处理各种颜色格式。它完全兼容Python webcolors库的功能,是Golang开发者处理Web颜色的理想选择。


更多关于golang实现Python webcolors颜色库功能的插件库go-webcolors的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang实现Python webcolors颜色库功能的插件库go-webcolors的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go-webcolors: Golang实现的Web颜色处理库

go-webcolors是一个模仿Python webcolors库功能的Golang实现,用于处理Web开发中常见的颜色格式转换和操作。下面详细介绍其功能和使用方法。

安装

go get github.com/kenshaw/webcolors

主要功能

1. 颜色名称与RGB/HEX转换

package main

import (
	"fmt"
	"github.com/kenshaw/webcolors"
)

func main() {
	// 颜色名称转RGB
	rgb, err := webcolors.NameToRGB("red")
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Printf("Red in RGB: %v\n", rgb) // 输出: Red in RGB: {255 0 0}
	}

	// RGB转颜色名称
	name, err := webcolors.RGBToName(webcolors.RGB{R: 0, G: 255, B: 0})
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Printf("RGB(0,255,0) is: %s\n", name) // 输出: RGB(0,255,0) is: lime
	}

	// HEX转RGB
	hexRgb, err := webcolors.HexToRGB("#ff0000")
	if err != nil {
		fmt.Println("Error:", err)
	} else {
		fmt.Printf("#ff0000 in RGB: %v\n", hexRgb) // 输出: #ff0000 in RGB: {255 0 0}
	}

	// RGB转HEX
	hex := webcolors.RGBToHex(webcolors.RGB{R: 0, G: 128, B: 0})
	fmt.Printf("RGB(0,128,0) in HEX: %s\n", hex) // 输出: RGB(0,128,0) in HEX: #008000
}

2. CSS颜色处理

// CSS颜色名称转RGB
cssRgb, err := webcolors.CSSNameToRGB("darkorange")
if err != nil {
	fmt.Println("Error:", err)
} else {
	fmt.Printf("darkorange in RGB: %v\n", cssRgb) // 输出: darkorange in RGB: {255 140 0}
}

// CSS3颜色名称转RGB
css3Rgb, err := webcolors.CSS3NameToRGB("rebeccapurple")
if err != nil {
	fmt.Println("Error:", err)
} else {
	fmt.Printf("rebeccapurple in RGB: %v\n", css3Rgb) // 输出: rebeccapurple in RGB: {102 51 153}
}

3. 颜色格式规范化

// 规范化HEX颜色
normalizedHex := webcolors.NormalizeHex("#ABC")
fmt.Println(normalizedHex) // 输出: #aabbcc

normalizedHex = webcolors.NormalizeHex("#aabbcc")
fmt.Println(normalizedHex) // 输出: #aabbcc

4. 颜色距离计算

// 计算两个RGB颜色的欧几里得距离
color1 := webcolors.RGB{R: 255, G: 0, B: 0}   // 红色
color2 := webcolors.RGB{R: 0, G: 255, B: 0}   // 绿色
distance := webcolors.RGBDistance(color1, color2)
fmt.Printf("Color distance: %.2f\n", distance) // 输出: Color distance: 360.62

5. 查找最接近的颜色名称

// 查找最接近的颜色名称
closest, err := webcolors.ClosestName(webcolors.RGB{R: 200, G: 100, B: 50})
if err != nil {
	fmt.Println("Error:", err)
} else {
	fmt.Printf("Closest color name: %s\n", closest) // 输出: Closest color name: peru
}

// 在指定颜色列表中查找最接近的颜色
customColors := map[string]webcolors.RGB{
	"myred":    {200, 0, 0},
	"mygreen":  {0, 200, 0},
	"myyellow": {200, 200, 0},
}
closestCustom := webcolors.ClosestColor(webcolors.RGB{R: 180, G: 190, B: 0}, customColors)
fmt.Printf("Closest custom color: %s\n", closestCustom) // 输出: Closest custom color: myyellow

高级用法

自定义颜色映射

// 添加自定义颜色
customColor := webcolors.RGB{R: 123, G: 45, B: 67}
webcolors.AddColor("mycustom", customColor)

// 使用自定义颜色
rgb, err := webcolors.NameToRGB("mycustom")
if err != nil {
	fmt.Println("Error:", err)
} else {
	fmt.Printf("Custom color: %v\n", rgb) // 输出: Custom color: {123 45 67}
}

批量处理颜色

// 批量转换颜色名称
colorNames := []string{"red", "green", "blue"}
for _, name := range colorNames {
	rgb, err := webcolors.NameToRGB(name)
	if err != nil {
		fmt.Printf("Error converting %s: %v\n", name, err)
		continue
	}
	fmt.Printf("%s: %v\n", name, rgb)
}

注意事项

  1. go-webcolors支持CSS1、CSS2和CSS3标准定义的颜色名称
  2. 所有RGB值范围是0-255
  3. HEX颜色支持3位和6位格式
  4. 错误处理很重要,特别是当颜色名称不存在时

总结

go-webcolors提供了完整的Web颜色处理功能,包括:

  • 颜色名称与RGB/HEX之间的转换
  • CSS颜色规范支持
  • 颜色格式规范化
  • 颜色距离计算
  • 最近颜色查找

这个库非常适合需要在Golang中处理Web颜色相关的项目,如网页爬虫、颜色分析工具、UI开发等场景。

回到顶部