82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"gitee.ltd/lxh/logger/log"
|
|
"github.com/skip2/go-qrcode"
|
|
"image/color"
|
|
)
|
|
|
|
type qrCode struct{}
|
|
|
|
func QRCode() qrCode {
|
|
return qrCode{}
|
|
}
|
|
|
|
// GenerateQrCodeBase64
|
|
// @description: 生成二维码
|
|
// @receiver qr
|
|
// @param content
|
|
// @param size
|
|
// @return imgStr
|
|
// @return err
|
|
func (qr qrCode) GenerateQrCodeBase64(content []byte, size int) (imgStr string, err error) {
|
|
q, err := qrcode.New(string(content), qrcode.Highest)
|
|
if err != nil {
|
|
log.Errorf("初始化二维码对象失败: %v", err.Error())
|
|
return
|
|
}
|
|
q.DisableBorder = false
|
|
|
|
png, err := q.PNG(size)
|
|
if err != nil {
|
|
log.Errorf("生成二维码失败: %v", err.Error())
|
|
return "", err
|
|
}
|
|
|
|
imgStr = "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
|
|
return
|
|
}
|
|
|
|
// GenerateQrCodeASCII
|
|
// @description: 生成二维码
|
|
// @receiver qr
|
|
// @param content
|
|
// @param size
|
|
// @return imgStr
|
|
// @return err
|
|
func (qr qrCode) GenerateQrCodeASCII(content []byte) (str string, err error) {
|
|
q, err := qrcode.New(string(content), qrcode.Highest)
|
|
if err != nil {
|
|
log.Errorf("初始化二维码对象失败: %v", err.Error())
|
|
return
|
|
}
|
|
|
|
// 设置二维码的尺寸,这里是 16 的倍数
|
|
size := 16
|
|
img := q.Image(size)
|
|
|
|
isBlock := func(c color.Color) bool {
|
|
r, g, b, _ := c.RGBA()
|
|
// 转换到 0-255 范围,并判断是否接近黑色
|
|
return r < 5000 && g < 5000 && b < 5000
|
|
}
|
|
|
|
for y := 0; y < img.Bounds().Dy(); y += 16 {
|
|
for x := 0; x < img.Bounds().Dx(); x++ {
|
|
// 获取当前像素的颜色
|
|
color := img.At(x, y)
|
|
|
|
// 判断像素是否接近黑色,黑色输出为 '██',白色输出为空格
|
|
if isBlock(color) {
|
|
str += "██" // 黑色模块,输出方块字符
|
|
} else {
|
|
str += " " // 白色模块,输出空格
|
|
}
|
|
}
|
|
str += "\n"
|
|
}
|
|
|
|
return str, nil
|
|
}
|