This commit is contained in:
2025-10-10 13:10:30 +01:00
parent 1a16fd409e
commit a88e871e89
2 changed files with 62 additions and 0 deletions

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module forge.sunglocto.net/sunglocto/xep0392
go 1.25.1

59
main.go Normal file
View File

@@ -0,0 +1,59 @@
package xep0392
import (
"crypto/sha1"
"encoding/binary"
"fmt"
"image"
"image/color"
"math"
)
// TODO: import "github.com/hsluv/go-hsluv"
func HsluvToRGB(h, s, l float64) (r, g, b float64) {
return 0, 0, 0
}
func ColorFromString(id string) color.RGBA {
hue := hueFromString(id)
s := 100.0
l := 50.0
r, g, b := HsluvToRGB(hue, s, l)
return color.RGBA{
R: uint8(clamp01(r) * 255),
G: uint8(clamp01(g) * 255),
B: uint8(clamp01(b) * 255),
A: 255,
}
}
func ImageWithColor(id string, width, height int) *image.RGBA {
c := ColorFromString(id)
img := image.NewRGBA(image.Rect(0, 0, width, height))
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
img.SetRGBA(x, y, c)
}
}
return img
}
func hueFromString(s string) float64 {
h := sha1.Sum([]byte(s))
v := binary.LittleEndian.Uint16(h[18:20])
hue := float64(v) * 360.0 / 65536.0
if hue >= 360.0 {
hue = math.Mod(hue, 360.0)
}
return hue
}
func clamp01(f float64) float64 {
if f < 0 {
return 0
}
if f > 1 {
return 1
}
return f
}