|
| 1 | +// Package qrcodeTool Description: 二维码工具类 |
| 2 | +package qrcodeTool |
| 3 | + |
| 4 | +import ( |
| 5 | + "bytes" |
| 6 | + "image/color" |
| 7 | + "os" |
| 8 | + |
| 9 | + qrgen "github.com/skip2/go-qrcode" |
| 10 | + "github.com/tuotoo/qrcode" |
| 11 | +) |
| 12 | + |
| 13 | +// E二维码纠错级别 是二维码的纠错级别类型,使用来自 qrgen 库的原生纠错级别。 |
| 14 | +type E二维码纠错级别 = qrgen.RecoveryLevel |
| 15 | + |
| 16 | +const ( |
| 17 | + // E低级 表示7%的错误恢复率 |
| 18 | + E低级 E二维码纠错级别 = qrgen.Low |
| 19 | + // E中级 表示15%的错误恢复率 |
| 20 | + E中级 E二维码纠错级别 = qrgen.Medium |
| 21 | + // E高级 表示25%的错误恢复率 |
| 22 | + E高级 E二维码纠错级别 = qrgen.High |
| 23 | + // E最高级 表示30%的错误恢复率 |
| 24 | + E最高级 E二维码纠错级别 = qrgen.Highest |
| 25 | +) |
| 26 | + |
| 27 | +// E二维码工具类 提供二维码生成和识别的工具方法 |
| 28 | +type E二维码工具类 struct{} |
| 29 | + |
| 30 | +// E生成二维码 生成一个二维码并返回其字节数组 |
| 31 | +// |
| 32 | +// 参数: |
| 33 | +// - 二维码内容: 需要生成的二维码内容 |
| 34 | +// - 尺寸: 二维码的尺寸(像素) |
| 35 | +// - 纠错级别: 二维码的纠错级别 |
| 36 | +// |
| 37 | +// 返回: |
| 38 | +// - 二维码字节数组 |
| 39 | +// - 错误信息(如果有) |
| 40 | +func (E二维码工具类) E生成二维码(二维码内容 string, 尺寸 int, 纠错级别 E二维码纠错级别) ([]byte, error) { |
| 41 | + return qrgen.Encode(二维码内容, qrgen.RecoveryLevel(纠错级别), 尺寸) |
| 42 | +} |
| 43 | + |
| 44 | +// E生成并保存 生成二维码并保存为文件 |
| 45 | +// |
| 46 | +// 参数: |
| 47 | +// - 二维码内容: 需要生成的二维码内容 |
| 48 | +// - 尺寸: 二维码的尺寸(像素) |
| 49 | +// - 保存文件名: 保存的文件路径 |
| 50 | +// - 纠错级别: 二维码的纠错级别 |
| 51 | +// |
| 52 | +// 返回: |
| 53 | +// - 错误信息(如果有) |
| 54 | +func (E二维码工具类) E生成并保存(二维码内容 string, 尺寸 int, 保存文件名 string, 纠错级别 E二维码纠错级别) error { |
| 55 | + return qrgen.WriteFile(二维码内容, qrgen.RecoveryLevel(纠错级别), 尺寸, 保存文件名) |
| 56 | +} |
| 57 | + |
| 58 | +// E生成并保存2 生成自定义颜色的二维码并保存为文件 |
| 59 | +// |
| 60 | +// 参数: |
| 61 | +// - 二维码内容: 需要生成的二维码内容 |
| 62 | +// - 尺寸: 二维码的尺寸(像素) |
| 63 | +// - 保存文件名: 保存的文件路径 |
| 64 | +// - 背景颜色: 二维码的背景颜色 |
| 65 | +// - 前景颜色: 二维码的前景颜色 |
| 66 | +// - 纠错级别: 二维码的纠错级别 |
| 67 | +// |
| 68 | +// 返回: |
| 69 | +// - 错误信息(如果有) |
| 70 | +func (E二维码工具类) E生成并保存2(二维码内容 string, 尺寸 int, 保存文件名 string, 背景颜色, 前景颜色 color.Color, 纠错级别 E二维码纠错级别) error { |
| 71 | + return qrgen.WriteColorFile(二维码内容, qrgen.RecoveryLevel(纠错级别), 尺寸, 前景颜色, 背景颜色, 保存文件名) |
| 72 | +} |
| 73 | + |
| 74 | +// E识别二维码 从文件中读取并识别二维码 |
| 75 | +// |
| 76 | +// 参数: |
| 77 | +// - file: 文件指针,指向需要识别的二维码图片 |
| 78 | +// |
| 79 | +// 返回: |
| 80 | +// - 识别的二维码内容 |
| 81 | +// - 错误信息(如果有) |
| 82 | +func (E二维码工具类) E识别二维码(file *os.File) (string, error) { |
| 83 | + qrmatrix, err := qrcode.Decode(file) |
| 84 | + if err != nil { |
| 85 | + return "", err |
| 86 | + } |
| 87 | + return qrmatrix.Content, nil |
| 88 | +} |
| 89 | + |
| 90 | +// E二维码类 表示二维码对象,包括其内容和属性 |
| 91 | +type E二维码类 struct { |
| 92 | + E内容 string // 二维码的内容 |
| 93 | + E纠错级别 E二维码纠错级别 // 二维码的纠错级别 |
| 94 | + E前景颜色 color.Color // 二维码的前景颜色 |
| 95 | + E背景颜色 color.Color // 二维码的背景颜色 |
| 96 | + E禁用边框 bool // 是否禁用二维码的边框 |
| 97 | + qrCode *qrgen.QRCode // 内部的二维码对象 |
| 98 | +} |
| 99 | + |
| 100 | +// E创建 创建一个二维码对象 |
| 101 | +// |
| 102 | +// 参数: |
| 103 | +// - 二维码内容: 需要生成的二维码内容 |
| 104 | +// - 级别: 二维码的纠错级别 |
| 105 | +// |
| 106 | +// 返回: |
| 107 | +// - 生成的二维码对象 |
| 108 | +// - 错误信息(如果有) |
| 109 | +func (E二维码类) E创建(二维码内容 string, 级别 E二维码纠错级别) (*E二维码类, error) { |
| 110 | + qrCode, err := qrgen.New(二维码内容, qrgen.RecoveryLevel(级别)) |
| 111 | + if err != nil { |
| 112 | + return nil, err |
| 113 | + } |
| 114 | + return &E二维码类{E内容: 二维码内容, E纠错级别: 级别, qrCode: qrCode}, nil |
| 115 | +} |
| 116 | + |
| 117 | +// E创建2 创建一个带有指定版本号的二维码对象 |
| 118 | +// |
| 119 | +// 参数: |
| 120 | +// - 二维码内容: 需要生成的二维码内容 |
| 121 | +// - 版本号: 二维码的版本号(1-40) |
| 122 | +// - 级别: 二维码的纠错级别 |
| 123 | +// |
| 124 | +// 返回: |
| 125 | +// - 生成的二维码对象 |
| 126 | +// - 错误信息(如果有) |
| 127 | +func (E二维码类) E创建2(二维码内容 string, 版本号 int, 级别 E二维码纠错级别) (*E二维码类, error) { |
| 128 | + qrCode, err := qrgen.NewWithForcedVersion(二维码内容, 版本号, qrgen.RecoveryLevel(级别)) |
| 129 | + if err != nil { |
| 130 | + return nil, err |
| 131 | + } |
| 132 | + return &E二维码类{E内容: 二维码内容, E纠错级别: 级别, qrCode: qrCode}, nil |
| 133 | +} |
| 134 | + |
| 135 | +// E取坐标数组 返回二维码的坐标数组 |
| 136 | +// |
| 137 | +// 返回: |
| 138 | +// - 一个二维布尔数组,表示二维码的像素点,true为黑色,false为白色 |
| 139 | +func (qr *E二维码类) E取坐标数组() [][]bool { |
| 140 | + return qr.qrCode.Bitmap() |
| 141 | +} |
| 142 | + |
| 143 | +// E生成二维码 返回指定尺寸的二维码图像 |
| 144 | +// |
| 145 | +// 参数: |
| 146 | +// - 尺寸: 二维码的尺寸(像素) |
| 147 | +// |
| 148 | +// 返回: |
| 149 | +// - 二维码图像的字节数组 |
| 150 | +func (qr *E二维码类) E生成二维码(尺寸 int) []byte { |
| 151 | + var buf bytes.Buffer |
| 152 | + err := qr.qrCode.Write(尺寸, &buf) |
| 153 | + if err != nil { |
| 154 | + return nil |
| 155 | + } |
| 156 | + return buf.Bytes() |
| 157 | +} |
| 158 | + |
| 159 | +// E写到接口 将二维码数据写出到一个接口中 |
| 160 | +// |
| 161 | +// 参数: |
| 162 | +// - 尺寸: 二维码的尺寸(像素) |
| 163 | +// - w: 要写入的接口(例如文件指针) |
| 164 | +// |
| 165 | +// 返回: |
| 166 | +// - 错误信息(如果有) |
| 167 | +func (qr *E二维码类) E写到接口(尺寸 int, w *os.File) error { |
| 168 | + return qr.qrCode.Write(尺寸, w) |
| 169 | +} |
| 170 | + |
| 171 | +// E写出文件 将二维码数据保存为文件 |
| 172 | +// |
| 173 | +// 参数: |
| 174 | +// - 尺寸: 二维码的尺寸(像素) |
| 175 | +// - 文件名: 保存的文件路径 |
| 176 | +// |
| 177 | +// 返回: |
| 178 | +// - 错误信息(如果有) |
| 179 | +func (qr *E二维码类) E写出文件(尺寸 int, 文件名 string) error { |
| 180 | + return qr.qrCode.WriteFile(尺寸, 文件名) |
| 181 | +} |
| 182 | + |
| 183 | +// E取图像文本 将二维码以文本形式返回 |
| 184 | +// |
| 185 | +// 参数: |
| 186 | +// - 反向颜色: 如果为true,返回黑白反转的二维码文本 |
| 187 | +// |
| 188 | +// 返回: |
| 189 | +// - 二维码的文本表示形式 |
| 190 | +func (qr *E二维码类) E取图像文本(反向颜色 bool) string { |
| 191 | + return qr.qrCode.ToString(反向颜色) |
| 192 | +} |
| 193 | + |
| 194 | +// E取小图像文本 将小尺寸二维码以文本形式返回 |
| 195 | +// |
| 196 | +// 参数: |
| 197 | +// - 反向颜色: 如果为true,返回黑白反转的二维码文本 |
| 198 | +// |
| 199 | +// 返回: |
| 200 | +// - 小尺寸二维码的文本表示形式 |
| 201 | +func (qr *E二维码类) E取小图像文本(反向颜色 bool) string { |
| 202 | + return qr.qrCode.ToSmallString(反向颜色) |
| 203 | +} |
0 commit comments