gpt4 book ai didi

html - 在Go中将webcolor html颜色名称转换为十六进制的函数深橙色->#FF8C00

转载 作者:行者123 更新时间:2023-12-03 10:09:03 24 4
gpt4 key购买 nike

我正在尝试将Webcolor名称转换为DarkOrange,尽管理想情况下它将能够将小写(darkorange)解析为该颜色的十六进制#FF8C00
我注意到Go确实包含了返回RGBA的colornames包

import (
"golang.org/x/image/colornames"
"fmt"
)

func main() {
lightyellow := colornames.Lightyellow
fmt.Println("colour rgba: ", lightyellow)
}
但是我希望能够编写一个函数,可以传入webcolor名称,然后得出十六进制:
func convertWebToHex(webcolorname string)(hexcolor string){
PLEASE HELP WITH THIS
return hexcolor
}

最佳答案

简单的解决方案
软件包 golang.org/x/image/colornames 还包含一个导出的Map变量,该变量将小写的颜色名称映射到 color.RGBA
因此,只需使用此映射即可查找名称的颜色,然后将RGB分量转换为十六进制表示形式:

func convertWebToHex(webcolorname string) (hexcolor string) {
c, ok := colornames.Map[webcolorname]
if !ok {
// Unknown name
return ""
}
return fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B)
}
测试它:
names := []string{
"red",
"yellow",
"lightyellow",
"invalid",
}
for _, name := range names {
fmt.Printf("%-12s: %s\n", name, convertWebToHex(name))
}
哪个输出(在 Go Playground上尝试):
red         : #FF0000
yellow : #FFFF00
lightyellow : #FFFFE0
invalid :
不区分大小写的解决方案
如果要以不区分大小写的方式查找颜色,请使用 strings.ToLower() 将名称转换为小写,然后继续查找:
func convertWebToHex(webcolorname string) (hexcolor string) {
c, ok := colornames.Map[strings.ToLower(webcolorname)]
if !ok {
// Unknown name
return ""
}
return fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B)
}
测试它:
names := []string{
"Red",
"yELLOW",
"LightYellow",
"invalid",
}
for _, name := range names {
fmt.Printf("%-12s: %s\n", name, convertWebToHex(name))
}
哪个输出(在 Go Playground上尝试):
Red         : #FF0000
yELLOW : #FFFF00
LightYellow : #FFFFE0
invalid :
预先计算的十六进制值
还要注意,如果必须频繁进行这些查找,则创建自己的映射可能会很有用,在该映射中,您可以从颜色名称映射到生成的十六进制字符串,因此不必一直将 color.RGBA转换为十六进制字符串。
这是这种预先计算的 map 解决方案的样子:
var colorMap = map[string]string{}

func init() {
for name, c := range colornames.Map {
colorMap[name] = fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B)
}
}

func convertWebToHex(webcolorname string) (hexcolor string) {
// invalid color results in the zero value ""
return colorMap[strings.ToLower(webcolorname)]
}
测试和输出是相同的。在 Go Playground上尝试这个。

关于html - 在Go中将webcolor html颜色名称转换为十六进制的函数深橙色->#FF8C00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64612950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com