golang生成个性化样式QR码插件库go-qrcode的使用
go-qrcode - Golang生成个性化样式QR码插件库
简介
QR码(Quick Response Code)是一种矩阵二维码,最初于1994年为日本汽车行业设计。它是一种包含信息的机器可读光学标签。go-qrcode是一个功能强大的Golang库,可以生成各种个性化样式的QR码。
特性
- 支持生成版本1到版本40的QR码
- 自动根据源文本分析QR码版本
- 可自定义单元格形状(默认矩形,支持圆形等)
- 可指定输出文件格式(默认JPEG)
- 可自定义QR码前景色和背景色
- 支持在QR码中心添加Logo图标
- 可自定义QR码边框宽度
- 支持WebAssembly
- 支持半色调QR码
安装
go get -u github.com/yeqown/go-qrcode/v2
快速开始
package main
import (
"fmt"
"github.com/yeqown/go-qrcode/v2"
"github.com/yeqown/go-qrcode/writer/standard"
)
func main() {
// 创建QR码
qrc, err := qrcode.New("https://github.com/yeqown/go-qrcode")
if err != nil {
fmt.Printf("could not generate QRCode: %v", err)
return
}
// 创建标准写入器
w, err := standard.New("qrcode.jpeg")
if err != nil {
fmt.Printf("standard.New failed: %v", err)
return
}
// 保存QR码图片
if err = qrc.Save(w); err != nil {
fmt.Printf("could not save image: %v", err)
}
}
选项配置
// 编码模式选项
const (
EncModeNone encMode = 1 << iota // 无模式
EncModeNumeric // 数字模式
EncModeAlphanumeric // 字母数字模式
EncModeByte // 字节模式
EncModeJP // 日文模式
)
// 错误纠正级别
const (
ErrorCorrectionLow ecLevel = iota + 1 // L级: 7%错误恢复
ErrorCorrectionMedium // M级: 15%错误恢复(默认)
ErrorCorrectionQuart // Q级: 25%错误恢复
ErrorCorrectionHighest // H级: 30%错误恢复
)
// 使用示例
qrc, err := qrcode.New(
"content",
qrcode.WithEncodingMode(EncModeByte),
qrcode.WithErrorCorrectionLevel(ErrorCorrectionHighest),
)
示例效果
效果 | 说明 |
---|---|
自定义前景背景色 | |
透明背景 | |
边框宽度 | |
圆形单元格 | |
前景渐变 | |
半色调效果 | |
添加Logo | |
自定义块宽度 | |
自定义形状 |
内置写入器
- 标准写入器: 将QR码写入文件和流
- 终端写入器: 在终端打印QR码
- 文件写入器: 将QR码写入文件
- 压缩写入器: 生成小尺寸QR码
你也可以实现自己的写入器,只需实现Writer
接口。
从v1迁移
go-qrcode.v2
是对v1的重大升级,不向后兼容。v2重新设计了API,更加灵活和强大。功能按模块划分:
- github.com/yeqown/go-qrcode/v2 (核心)
- github.com/yeqown/go-qrcode/writer/standard (图片文件写入器)
- github.com/yeqown/go-qrcode/writer/terminal (终端写入器)
完整示例
package main
import (
"fmt"
"image/color"
"github.com/yeqown/go-qrcode/v2"
"github.com/yeqown/go-qrcode/writer/standard"
)
func main() {
// 创建带选项的QR码
qrc, err := qrcode.New(
"https://github.com/yeqown/go-qrcode",
qrcode.WithEncodingMode(qrcode.EncModeByte),
qrcode.WithErrorCorrectionLevel(qrcode.ErrorCorrectionHighest),
qrcode.WithLogoImageFilePNG("logo.png"), // 添加Logo
)
if err != nil {
fmt.Printf("could not generate QRCode: %v", err)
return
}
// 创建带样式的写入器
w, err := standard.New(
"custom-qrcode.png",
standard.WithQRWidth(10), // 设置块宽度
standard.WithBorderWidth(20), // 设置边框宽度
standard.WithFgColor(color.RGBA{R: 0, G: 0, B: 128, A: 255}), // 前景色
standard.WithBgColor(color.RGBA{R: 255, G: 255, B: 255, A: 128}), // 半透明背景
standard.WithCircleShape(), // 圆形单元格
)
if err != nil {
fmt.Printf("standard.New failed: %v", err)
return
}
// 保存QR码
if err = qrc.Save(w); err != nil {
fmt.Printf("could not save image: %v", err)
}
}
这个示例展示了如何创建一个带Logo、自定义颜色、圆形单元格和半透明背景的QR码。
更多关于golang生成个性化样式QR码插件库go-qrcode的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复