1package main 2 3import "fmt" 4import "github.com/lucasb-eyer/go-colorful" 5import "image" 6import "image/draw" 7import "image/png" 8import "os" 9 10func main() { 11 blocks := 10 12 blockw := 40 13 img := image.NewRGBA(image.Rect(0, 0, blocks*blockw, 200)) 14 15 c1, _ := colorful.Hex("#fdffcc") 16 c2, _ := colorful.Hex("#242a42") 17 18 // Use these colors to get invalid RGB in the gradient. 19 //c1, _ := colorful.Hex("#EEEF61") 20 //c2, _ := colorful.Hex("#1E3140") 21 22 for i := 0; i < blocks; i++ { 23 draw.Draw(img, image.Rect(i*blockw, 0, (i+1)*blockw, 40), &image.Uniform{c1.BlendHsv(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) 24 draw.Draw(img, image.Rect(i*blockw, 40, (i+1)*blockw, 80), &image.Uniform{c1.BlendLuv(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) 25 draw.Draw(img, image.Rect(i*blockw, 80, (i+1)*blockw, 120), &image.Uniform{c1.BlendRgb(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) 26 draw.Draw(img, image.Rect(i*blockw, 120, (i+1)*blockw, 160), &image.Uniform{c1.BlendLab(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) 27 draw.Draw(img, image.Rect(i*blockw, 160, (i+1)*blockw, 200), &image.Uniform{c1.BlendHcl(c2, float64(i)/float64(blocks-1))}, image.ZP, draw.Src) 28 29 // This can be used to "fix" invalid colors in the gradient. 30 //draw.Draw(img, image.Rect(i*blockw,160,(i+1)*blockw,200), &image.Uniform{c1.BlendHcl(c2, float64(i)/float64(blocks-1)).Clamped()}, image.ZP, draw.Src) 31 } 32 33 toimg, err := os.Create("colorblend.png") 34 if err != nil { 35 fmt.Printf("Error: %v", err) 36 return 37 } 38 defer toimg.Close() 39 40 png.Encode(toimg, img) 41} 42