package main import ( "crypto/sha1" "fmt" "strconv" "github.com/fogleman/gg" ) // 8x8 square of 100x100 px squares func main() { dc := gg.NewContext(800, 800) hash := hash("InsightForgeOrg") colorString := hash[0:6] r, g, b := rgbFromHex(colorString) dc.SetRGB255(r, g, b) for i, character := range hash[6:14] { tmp, _ := strconv.ParseUint(string(character), 16, 8) n := int(tmp) for _, v := range []uint{0, 1, 2, 3} { on := hasBit(n, v) dc.DrawRectangle(float64(v * 100), float64(i * 100), 100, 100) dc.DrawRectangle(700 - float64(v * 100), float64(i * 100), 100, 100) if !on { dc.SetRGB255(r, g, b) } else { dc.SetRGB255(255, 255, 255) } dc.Fill() } } dc.SavePNG("out.png") } func rgbFromHex(hex string) (int, int, int) { r, _ := strconv.ParseUint(hex[0:2], 16, 8) g, _ := strconv.ParseUint(hex[2:4], 16, 8) b, _ := strconv.ParseUint(hex[4:6], 16, 8) return int(r), int(g), int(b) } func hash(str string) string { h := sha1.New() h.Write([]byte(str)) res := h.Sum(nil) return fmt.Sprintf("%x", res) } func hasBit(n int, pos uint) bool { val := n & (1 << pos) return (val > 0) } // 9d26bf3cf1fb2b2f02d4a2013333f4fcd551cb2e // 9d26bf -> color // 3 -> row1 // c -> row2 // ... // b -> row8 // 3 = 0 0 1 1 //