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

我正在尝试将像 DarkOrange 这样的 webcolor 名称转换为该颜色的十六进制名称#FF8C00,尽管理想情况下它能够解析小写字母(darkorange)


我注意到 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

}


慕雪6442864
浏览 101回答 1
1回答

冉冉说

简单的解决方案该包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         : #FF0000yellow      : #FFFF00lightyellow : #FFFFE0invalid     : 不区分大小写的解决方案如果您想以不区分大小写的方式查找颜色,请使用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         : #FF0000yELLOW      : #FFFF00LightYellow : #FFFFE0invalid     : 预先计算的十六进制值另请注意,如果您必须经常进行这些查找,创建自己的地图可能会有利可图,您可以将颜色名称映射到生成的十六进制字符串,因此您不必一直转换color.RGBA为十六进制字符串。这是这个预先计算的地图解决方案的样子: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上试试这个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go