Loading app-backend/images.go 0 → 100644 +85 −0 Original line number Diff line number Diff line package main import ( "bytes" "encoding/base64" "html/template" "image" "image/color" "image/draw" "image/jpeg" "log" "net/http" "strconv" ) func blackHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) black := color.RGBA{0, 0, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{black}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func greenHandler(w http.ResponseWriter, r *http.Request) { // prepare m := image.NewRGBA(image.Rect(0, 0, 240, 240)) green := color.RGBA{0, 128, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{green}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func blueHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) blue := color.RGBA{0, 0, 255, 255} draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func redHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) blue := color.RGBA{255, 0, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src) var img image.Image = m writeImageWithTemplate(w, &img) } var ImageTemplate string = `<!DOCTYPE html> <html lang="en"><head><title>{{ .Title }}</title></head> <body><img src="data:image/jpg;base64,{{.Image}}"></body>` // writeImageWithTemplate encodes an image 'img' in jpeg format and writes it into ResponseWriter using a template. func writeImageWithTemplate(w http.ResponseWriter, img *image.Image) { buffer := new(bytes.Buffer) if err := jpeg.Encode(buffer, *img, nil); err != nil { log.Fatalln("unable to encode image") } str := base64.StdEncoding.EncodeToString(buffer.Bytes()) var tmpl, _ = template.New("image").Parse(ImageTemplate) data := map[string]interface{}{"Image": str} tmpl.Execute(w, data) } // writeImage encodes an image 'img' in jpeg format and writes it into ResponseWriter. func writeImage(w http.ResponseWriter, img *image.Image) { buffer := new(bytes.Buffer) if err := jpeg.Encode(buffer, *img, nil); err != nil { log.Fatalln("unable to encode image") } w.Header().Set("Content-Type", "image/jpeg") w.Header().Set("Content-Length", strconv.Itoa(len(buffer.Bytes()))) if _, err := w.Write(buffer.Bytes()); err != nil { log.Fatalln("unable to write image") } } app-backend/main.go +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ func main() { http.HandleFunc("/black/", blackHandler) http.HandleFunc("/green/", greenHandler) http.HandleFunc("/blue/", blueHandler) http.HandleFunc("/red/", redHandler) http.Handle("/", http.FileServer(http.Dir(*root))) log.Println("Listening on " + os.Getenv("PORT")) err := http.ListenAndServe(":"+os.Getenv("PORT"), nil) Loading Loading
app-backend/images.go 0 → 100644 +85 −0 Original line number Diff line number Diff line package main import ( "bytes" "encoding/base64" "html/template" "image" "image/color" "image/draw" "image/jpeg" "log" "net/http" "strconv" ) func blackHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) black := color.RGBA{0, 0, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{black}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func greenHandler(w http.ResponseWriter, r *http.Request) { // prepare m := image.NewRGBA(image.Rect(0, 0, 240, 240)) green := color.RGBA{0, 128, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{green}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func blueHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) blue := color.RGBA{0, 0, 255, 255} draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src) var img image.Image = m writeImage(w, &img) } func redHandler(w http.ResponseWriter, r *http.Request) { m := image.NewRGBA(image.Rect(0, 0, 240, 240)) blue := color.RGBA{255, 0, 0, 255} draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src) var img image.Image = m writeImageWithTemplate(w, &img) } var ImageTemplate string = `<!DOCTYPE html> <html lang="en"><head><title>{{ .Title }}</title></head> <body><img src="data:image/jpg;base64,{{.Image}}"></body>` // writeImageWithTemplate encodes an image 'img' in jpeg format and writes it into ResponseWriter using a template. func writeImageWithTemplate(w http.ResponseWriter, img *image.Image) { buffer := new(bytes.Buffer) if err := jpeg.Encode(buffer, *img, nil); err != nil { log.Fatalln("unable to encode image") } str := base64.StdEncoding.EncodeToString(buffer.Bytes()) var tmpl, _ = template.New("image").Parse(ImageTemplate) data := map[string]interface{}{"Image": str} tmpl.Execute(w, data) } // writeImage encodes an image 'img' in jpeg format and writes it into ResponseWriter. func writeImage(w http.ResponseWriter, img *image.Image) { buffer := new(bytes.Buffer) if err := jpeg.Encode(buffer, *img, nil); err != nil { log.Fatalln("unable to encode image") } w.Header().Set("Content-Type", "image/jpeg") w.Header().Set("Content-Length", strconv.Itoa(len(buffer.Bytes()))) if _, err := w.Write(buffer.Bytes()); err != nil { log.Fatalln("unable to write image") } }
app-backend/main.go +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ func main() { http.HandleFunc("/black/", blackHandler) http.HandleFunc("/green/", greenHandler) http.HandleFunc("/blue/", blueHandler) http.HandleFunc("/red/", redHandler) http.Handle("/", http.FileServer(http.Dir(*root))) log.Println("Listening on " + os.Getenv("PORT")) err := http.ListenAndServe(":"+os.Getenv("PORT"), nil) Loading