/
qcode.go
55 lines (49 loc) · 1.18 KB
/
qcode.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package qrcode
import (
"encoding/base64"
"github.com/buzzxu/boys/common/bytess"
"net/http"
"strconv"
"text/template"
)
var ImageTemplate string = `<!DOCTYPE html>
<html lang="en"><head></head>
<body><img src="data:image/jpg;base64,{{.Image}}"></body>`
//HTML 生成HTML片段
func HTML(w http.ResponseWriter, param *QRParam) error {
val, err := String(param)
if err != nil {
return err
}
if tmpl, err := template.New("image").Parse(ImageTemplate); err != nil {
return err
} else {
data := map[string]interface{}{"Image": val}
if err = tmpl.Execute(w, data); err != nil {
return err
}
return nil
}
}
//Image 直接生成图片
func Image(w http.ResponseWriter, param *QRParam) error {
bytes, err := QrCode(param)
if err != nil {
return err
}
w.Header().Set("Content-Type", "image/png")
w.Header().Set("Content-Length", strconv.Itoa(len(bytes)))
if _, err := w.Write(bytes); err != nil {
return err
}
return nil
}
//String 生成Base64
func String(param *QRParam) (string, error) {
bytes, err := QrCode(param)
if err != nil {
return "", err
}
prefix, err := bytess.PrefixImageBase64(&bytes)
return prefix + base64.StdEncoding.EncodeToString(bytes), nil
}