GolangNote

Golang笔记

Golang 实现根据字符串生成固定颜色

Permalink

根据字符串生成固定颜色,效果如下

Golang 实现根据字符串生成固定颜色

算法来自 python 根据字符串随机生成颜色 , 这里简单用 go 改写

Go: str2rgb 根据字符串生成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
func str2rgb(text string) string {
	s384 := sha512.New384()
	s384.Write([]byte(text))
	digest := hex.EncodeToString(s384.Sum(nil))

	subSize := len(digest) / 3

	mv := big.NewInt(math.MaxInt64)
	mv.SetString(strings.Repeat("f", subSize), 16)

	maxValue := big.NewFloat(math.MaxFloat64)
	maxValue.SetInt(mv)

	digests := make([]string, 3)
	for i := 0; i < 3; i++ {
		digests[i] = digest[i*subSize : (i+1)*subSize]
	}

	goldPoint := big.NewFloat(0.618033988749895)

	rgbLst := make([]string, 3)
	for i, v := range digests {
		in := big.NewInt(math.MaxInt64)
		in.SetString(v, 16)

		inv := big.NewFloat(math.MaxFloat64)
		inv.SetInt(in)

		inf := big.NewFloat(math.MaxFloat64)
		inf.Quo(inv, maxValue).Add(inf, goldPoint)

		oneFloat := big.NewFloat(1)
		cmp := inf.Cmp(oneFloat)
		if cmp > -1 {
			inf.Sub(inf, oneFloat)
		}
		inf.Mul(inf, big.NewFloat(255)).Add(inf, big.NewFloat(0.5)).Sub(inf, big.NewFloat(0.0000005))

		i64, _ := inf.Int64()
		//fmt.Println(i64)
		rgbLst[i] = strconv.FormatInt(i64, 16)
	}

	return strings.Join(rgbLst, "")
}

Related articles

Golang 把cookie 字符串解析为cookie 结构

在做爬虫时有时候会遇到需要带已登录的 cookie 请求,这个时候最简单的方法是在浏览器登录后,在开发者面板找到cookie 字符串,然后拷贝粘贴。这就面临一个问题需要把cookie 字符串解析成Go 语言 cookie 结构体。...

Golang 生成防识别的图片验证码

验证码 captcha 是对抗密码强力破解、垃圾信息的有效方式,一般用于用户注册、登录,当检测到频繁发帖时也会启用验证码。下面介绍用golang 生成防机器识别的图片验证码。...

Write a Comment to "Golang 实现根据字符串生成固定颜色"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.16.5 Processed in 5ms