golang-generate-1pixel-image

package main

import (
    "bytes"
    "encoding/base64"
    "flag"
    "html/template"
    "image"
    "image/color"
    "image/draw"
    "image/jpeg"
    "log"
    "net/http"
    "strconv"
)

/*
@Time: 2018-12-20 16:50
@Desc:
*/

var root = flag.String("root", ".", "file system path")

func main() {
    http.HandleFunc("/blue", blueHandler)
    //http.HandleFunc("/red/", redHandler)
    http.Handle("/", http.FileServer(http.Dir(*root)))
    log.Println("Listening on 8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe:", err)
    }
}

func blueHandler(w http.ResponseWriter, req *http.Request) {
    m := image.NewRGBA(image.Rect(0, 0, 6, 6))
    blue := color.RGBA{255, 255, 255, 1}
    draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src)

    var img image.Image = m
    writeImage(w, &img)
}

func writeImage(w http.ResponseWriter, img *image.Image) {

    buffer := new(bytes.Buffer)
    if err := jpeg.Encode(buffer, *img, nil); err != nil {
        log.Println("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.Println("unable to write image.")
    }
}

func writeImageWithTemplate(w http.ResponseWriter, img *image.Image) {

    buffer := new(bytes.Buffer)
    if err := jpeg.Encode(buffer, *img, nil); err != nil {
        log.Println("unable to encode image.")
    }
    var ImageTemplate string = `<!DOCTYPE html>
    <html lang="en"><head></head>
    <body><img src="data:image/jpg;base64,{{.Image}}"></body>`
    str := base64.StdEncoding.EncodeToString(buffer.Bytes())
    if tmpl, err := template.New("image").Parse(ImageTemplate); err != nil {
        log.Println("unable to parse image template.")
    } else {
        data := map[string]interface{}{"Image": str}
        if err = tmpl.Execute(w, data); err != nil {
            log.Println("unable to execute template.")
        }
    }
}

golang生成1像素点图像;

参考:https://www.sanarias.com/blog/1214PlayingwithimagesinHTTPresponseingolang

原文地址:https://www.cnblogs.com/lavin/p/golang-generate-1pixel-image.html