/
qrArg.go
133 lines (116 loc) · 2.23 KB
/
qrArg.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package qrcode
import (
"image"
_ "image/jpeg"
_ "image/png"
"net/http"
"github.com/buzzxu/go-qrcode"
"strconv"
"image/color"
)
type QRParam struct {
Content string
Size int
BgMaxSize int
BgColor string
ForeColor string
Logo string
BgImg string
}
type QRArg struct {
Content string
size int
bgcolor color.Color
forecolor color.Color
logo image.Image
level qrcode.RecoveryLevel
bgimg image.Image
bdmaxsize int
}
//parse 解析参数
func parse(param *QRParam) *QRArg {
arg := &QRArg{}
arg.Content = param.Content
arg.parseSize(param.Size)
arg.parseBdmaxsize(param.BgMaxSize)
arg.parseBGColor(param.BgColor)
arg.parseForeColor(param.ForeColor)
arg.parseLogo(param.Logo)
arg.parseBGImg(param.BgImg)
if arg.logo == nil {
arg.level = qrcode.Highest
}else{
arg.level = qrcode.Medium
}
if arg.bgimg != nil {
if arg.bgimg.Bounds().Max.X > arg.bgimg.Bounds().Max.Y {
arg.size = arg.bgimg.Bounds().Max.Y
} else {
arg.size = arg.bgimg.Bounds().Max.X
}
// q.level = qrcode.Highest
}
return arg
}
func (q *QRArg) parseSize(size int) {
if size != 0 {
q.size = size
}else{
q.size = 256
}
}
func (q *QRArg) parseBdmaxsize(size int) {
if size != 0 {
q.bdmaxsize = size
}else{
q.bdmaxsize = -1
}
}
func (q *QRArg) parseBGColor(str string) {
s, err := strconv.ParseUint(str, 16, 32)
if err != nil {
q.bgcolor = color.White
}else{
q.bgcolor = color.RGBA{R: uint8(s & 0xff0000 >> 16),
G: uint8(s & 0xff00 >> 8),
B: uint8(s & 0xff),
A: uint8(0xff)}
}
}
func (q *QRArg) parseForeColor(str string) {
s, err := strconv.ParseUint(str, 16, 32)
if err != nil {
q.forecolor = color.Black
}else{
q.forecolor = color.RGBA{R: uint8(s & 0xff0000 >> 16),
G: uint8(s & 0xff00 >> 8),
B: uint8(s & 0xff),
A: uint8(uint8(0xff))}
}
}
func (q *QRArg) parseLogo(str string) {
if len(str) == 0 {
q.logo = nil
}else{
q.logo = downImg(str)
}
}
func (q *QRArg) parseBGImg(str string) {
if len(str) == 0 {
q.bgimg = nil
}else{
q.bgimg = downImg(str)
}
}
func downImg(str string) image.Image {
resp, err := http.Get(str)
if err != nil {
return nil
}
defer resp.Body.Close()
logo, _, err := image.Decode(resp.Body)
if err != nil {
return nil
}
return logo
}