Loading controllers/squares/square.go +14 −6 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ func Square(w http.ResponseWriter, r *http.Request) { log.Println("Unable to get 'key' value: ", err) key = "" } theme := extract.Theme(r) h := md5.New() Loading @@ -44,9 +45,10 @@ func Square(w http.ResponseWriter, r *http.Request) { } } numColors := extract.NumColors(r) colorMap := colors.MapOfColorThemes() var bg, fg color.RGBA var bg, fg color.RGBA if bg, err = extract.Background(r); err != nil { bg = colorMap["base"][0] } Loading @@ -54,19 +56,25 @@ func Square(w http.ResponseWriter, r *http.Request) { fg = colorMap["base"][1] } if val, ok := colorMap[theme]; ok { bg = val[0] fg = val[1] var colors []color.RGBA if theme != "base" { if _, ok := colorMap[theme]; ok { colors = append(colors, colorMap[theme][0:numColors]...) } else { colors = append(colors, colorMap["base"]...) } } else { colors = append(colors, bg, fg) } size := extract.Size(r) if f := extract.Format(r); f == format.JPEG { m := image.NewRGBA(image.Rect(0, 0, size, size)) draw.Squares(m, key, bg, fg) draw.Squares(m, key, colors) var img image.Image = m write.ImageJPEG(w, &img) } else if f == format.SVG { write.ImageSVG(w) draw.SquaresSVG(w, key, bg, fg, size) draw.SquaresSVG(w, key, colors, size) } } draw/draw.go +6 −5 Original line number Diff line number Diff line package draw import ( "github.com/ajstarks/svgo" "image" "image/color" "math" "net/http" "github.com/ajstarks/svgo" ) //Grid6X6 builds an image with 6X6 quadrants of alternate colors. Loading Loading @@ -152,7 +153,7 @@ func RandomSymetricInXGrid6X6(m *image.RGBA, color1, color2 color.RGBA) { } } func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { func Squares(m *image.RGBA, key string, colors []color.RGBA) { size := m.Bounds().Size() squares := 6 quad := size.X / squares Loading @@ -170,7 +171,7 @@ func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { xQuadrant := x / quad if _, ok := colorMap[xQuadrant]; !ok { if float64(xQuadrant) < middle { colorMap[xQuadrant] = colorFromKey(key, color1, color2, xQuadrant+3*yQuadrant) colorMap[xQuadrant] = colorFromKeyAndArray(key, colors, xQuadrant+3*yQuadrant) } else if xQuadrant < squares { colorMap[xQuadrant] = colorMap[squares-xQuadrant-1] } else { Loading @@ -182,7 +183,7 @@ func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { } } func SquaresSVG(w http.ResponseWriter, key string, color1, color2 color.RGBA, size int) { func SquaresSVG(w http.ResponseWriter, key string, colors []color.RGBA, size int) { canvas := svg.New(w) canvas.Start(size, size) Loading @@ -198,7 +199,7 @@ func SquaresSVG(w http.ResponseWriter, key string, color1, color2 color.RGBA, si x := xQ * quadrantSize if _, ok := colorMap[xQ]; !ok { if float64(xQ) < middle { colorMap[xQ] = colorFromKey(key, color1, color2, xQ+3*yQ) colorMap[xQ] = colorFromKeyAndArray(key, colors, xQ+3*yQ) } else if xQ < squares { colorMap[xQ] = colorMap[squares-xQ-1] } else { Loading draw/tools.go +15 −0 Original line number Diff line number Diff line Loading @@ -34,3 +34,18 @@ func colorFromKey(key string, color1, color2 color.RGBA, index int) color.RGBA { } return color1 } func colorFromKeyAndArray(key string, colors []color.RGBA, index int) color.RGBA { n := len(colors) s := hex.EncodeToString([]byte{key[index]}) if r, err := strconv.ParseInt(s, 16, 0); err == nil { for i := 0; i < n; i++ { if int(r)%n == i { return colors[i] } } } else { log.Println("Error calling ParseInt(%v, 16, 0)", s, err) } return colors[0] } extract/extract.go +14 −0 Original line number Diff line number Diff line Loading @@ -82,3 +82,17 @@ func Theme(r *http.Request) string { } return "base" } // NumColors returns the number of colors in http request. // Right now we support numbers between 2 and 4. func NumColors(r *http.Request) int64 { s := strings.ToLower(r.FormValue("numcolors")) if len(s) > 0 { if n, err := strconv.ParseInt(s, 0, 64); err == nil { if n >= 2 && n <= 4 { return n } } } return 2 } Loading
controllers/squares/square.go +14 −6 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ func Square(w http.ResponseWriter, r *http.Request) { log.Println("Unable to get 'key' value: ", err) key = "" } theme := extract.Theme(r) h := md5.New() Loading @@ -44,9 +45,10 @@ func Square(w http.ResponseWriter, r *http.Request) { } } numColors := extract.NumColors(r) colorMap := colors.MapOfColorThemes() var bg, fg color.RGBA var bg, fg color.RGBA if bg, err = extract.Background(r); err != nil { bg = colorMap["base"][0] } Loading @@ -54,19 +56,25 @@ func Square(w http.ResponseWriter, r *http.Request) { fg = colorMap["base"][1] } if val, ok := colorMap[theme]; ok { bg = val[0] fg = val[1] var colors []color.RGBA if theme != "base" { if _, ok := colorMap[theme]; ok { colors = append(colors, colorMap[theme][0:numColors]...) } else { colors = append(colors, colorMap["base"]...) } } else { colors = append(colors, bg, fg) } size := extract.Size(r) if f := extract.Format(r); f == format.JPEG { m := image.NewRGBA(image.Rect(0, 0, size, size)) draw.Squares(m, key, bg, fg) draw.Squares(m, key, colors) var img image.Image = m write.ImageJPEG(w, &img) } else if f == format.SVG { write.ImageSVG(w) draw.SquaresSVG(w, key, bg, fg, size) draw.SquaresSVG(w, key, colors, size) } }
draw/draw.go +6 −5 Original line number Diff line number Diff line package draw import ( "github.com/ajstarks/svgo" "image" "image/color" "math" "net/http" "github.com/ajstarks/svgo" ) //Grid6X6 builds an image with 6X6 quadrants of alternate colors. Loading Loading @@ -152,7 +153,7 @@ func RandomSymetricInXGrid6X6(m *image.RGBA, color1, color2 color.RGBA) { } } func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { func Squares(m *image.RGBA, key string, colors []color.RGBA) { size := m.Bounds().Size() squares := 6 quad := size.X / squares Loading @@ -170,7 +171,7 @@ func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { xQuadrant := x / quad if _, ok := colorMap[xQuadrant]; !ok { if float64(xQuadrant) < middle { colorMap[xQuadrant] = colorFromKey(key, color1, color2, xQuadrant+3*yQuadrant) colorMap[xQuadrant] = colorFromKeyAndArray(key, colors, xQuadrant+3*yQuadrant) } else if xQuadrant < squares { colorMap[xQuadrant] = colorMap[squares-xQuadrant-1] } else { Loading @@ -182,7 +183,7 @@ func Squares(m *image.RGBA, key string, color1, color2 color.RGBA) { } } func SquaresSVG(w http.ResponseWriter, key string, color1, color2 color.RGBA, size int) { func SquaresSVG(w http.ResponseWriter, key string, colors []color.RGBA, size int) { canvas := svg.New(w) canvas.Start(size, size) Loading @@ -198,7 +199,7 @@ func SquaresSVG(w http.ResponseWriter, key string, color1, color2 color.RGBA, si x := xQ * quadrantSize if _, ok := colorMap[xQ]; !ok { if float64(xQ) < middle { colorMap[xQ] = colorFromKey(key, color1, color2, xQ+3*yQ) colorMap[xQ] = colorFromKeyAndArray(key, colors, xQ+3*yQ) } else if xQ < squares { colorMap[xQ] = colorMap[squares-xQ-1] } else { Loading
draw/tools.go +15 −0 Original line number Diff line number Diff line Loading @@ -34,3 +34,18 @@ func colorFromKey(key string, color1, color2 color.RGBA, index int) color.RGBA { } return color1 } func colorFromKeyAndArray(key string, colors []color.RGBA, index int) color.RGBA { n := len(colors) s := hex.EncodeToString([]byte{key[index]}) if r, err := strconv.ParseInt(s, 16, 0); err == nil { for i := 0; i < n; i++ { if int(r)%n == i { return colors[i] } } } else { log.Println("Error calling ParseInt(%v, 16, 0)", s, err) } return colors[0] }
extract/extract.go +14 −0 Original line number Diff line number Diff line Loading @@ -82,3 +82,17 @@ func Theme(r *http.Request) string { } return "base" } // NumColors returns the number of colors in http request. // Right now we support numbers between 2 and 4. func NumColors(r *http.Request) int64 { s := strings.ToLower(r.FormValue("numcolors")) if len(s) > 0 { if n, err := strconv.ParseInt(s, 0, 64); err == nil { if n >= 2 && n <= 4 { return n } } } return 2 }