golang原生高质量极简QR码生成插件库go-qr的使用
Golang原生高质量极简QR码生成插件库go-qr的使用
概述
go-qr是一个原生、高质量且极简的Go语言QR码生成库。它可以从字符串文本生成QR码,主要基于Nayuki的Java版本QR码生成器库的翻译实现。
特性
- 极简的原生代码实现
- 基于QR Code Model 2标准,支持所有40个版本和4个纠错级别
- 输出格式:QR符号的原始模块/像素
- 比其他实现更准确地检测finder-like惩罚模式
- 对数字和特殊字母数字文本的编码空间优化
- 日文Unicode文本编码优化
- 对于混合数字/字母数字/通用/汉字文本,计算最优分段模式切换
- 良好的测试覆盖率
- MIT开源许可证
安装
go get github.com/piglig/go-qr
示例代码
package main
import (
go_qr "github.com/piglig/go-qr"
"image/color"
)
func main() {
doBasicDemo()
}
func doBasicDemo() {
text := "Hello, world!"
errCorLvl := go_qr.Low
qr, err := go_qr.EncodeText(text, errCorLvl)
if err != nil {
return
}
config := go_qr.NewQrCodeImgConfig(10, 4)
err = qr.PNG(config, "hello-world-QR.png")
if err != nil {
return
}
err = qr.SVG(config, "hello-world-QR.svg", "#FFFFFF", "#000000")
if err != nil {
return
}
err = qr.SVG(go_qr.NewQrCodeImgConfig(10, 4, go_qr.WithSVGXMLHeader(true)), "hello-world-QR-xml-header.svg", "#FFFFFF", "#000000")
if err != nil {
return
}
}
命令行工具
安装
要使用该工具,请使用以下命令编译:
go install github.com/piglig/go-qr/tools/generator@latest
使用
generator [options] [arguments]
-content string
Content to encode in the QR code
-png string
Output PNG file name
-svg string
Output SVG file name
-svg-optimized
Output optimized SVG file name - regions with connected black pixels are merged into a single path
示例
- 文本艺术
generator -content hello
- 图像类型
generator -content hello -png hello.png -svg hello.svg
- 优化的SVG类型
generator -content hello -svg hello.svg -svg-optimized hello-optimized.svg
优化的SVG输出会围绕连接的黑色区域创建路径,这减少了文件大小和渲染伪影。
许可证
MIT开源许可证。
更多关于golang原生高质量极简QR码生成插件库go-qr的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang原生高质量极简QR码生成插件库go-qr的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-qr: 极简高效的Go语言QR码生成库
go-qr 是一个轻量级、高质量的纯Go语言QR码生成库,不依赖任何外部C库或系统组件。下面我将详细介绍其使用方法和最佳实践。
安装
go get github.com/yeqown/go-qrcode/v2
go get github.com/yeqown/go-qrcode/writer/standard
基本使用
1. 生成最简单的QR码
package main
import (
"github.com/yeqown/go-qrcode/v2"
"github.com/yeqown/go-qrcode/writer/standard"
"log"
)
func main() {
qrc, err := qrcode.New("https://github.com/yeqown/go-qrcode")
if err != nil {
log.Fatalf("could not generate QRCode: %v", err)
}
// 保存为PNG文件
w, err := standard.New("simple-qrcode.png")
if err != nil {
log.Fatalf("standard.New failed: %v", err)
}
if err = qrc.Save(w); err != nil {
log.Fatalf("could not save image: %v", err)
}
}
2. 自定义QR码样式
func generateCustomQR() {
qrc, err := qrcode.NewWith(
"https://github.com/yeqown/go-qrcode",
qrcode.WithEncodingMode(qrcode.EncModeByte),
qrcode.WithErrorCorrectionLevel(qrcode.ErrorCorrectionHighest),
)
if err != nil {
log.Fatal(err)
}
// 自定义写入器选项
wr := standard.NewWithWriter(
os.Stdout,
standard.WithBgColorRGBHex("#FFFFFF"),
standard.WithFgColorRGBHex("#000000"),
standard.WithQRWidth(20), // 每个模块的像素大小
standard.WithBorderWidth(40),
standard.WithLogoImageFilePNG("logo.png", 100), // 添加logo
)
if err = qrc.Save(wr); err != nil {
log.Fatal(err)
}
}
高级功能
1. 生成到内存而非文件
func generateToMemory() []byte {
qrc, err := qrcode.New("https://github.com")
if err != nil {
log.Fatal(err)
}
var buf bytes.Buffer
wr := standard.NewWithWriter(&buf, standard.WithQRWidth(10))
if err = qrc.Save(wr); err != nil {
log.Fatal(err)
}
return buf.Bytes()
}
2. 生成SVG格式QR码
func generateSVG() {
qrc, err := qrcode.New("SVG QR Code")
if err != nil {
log.Fatal(err)
}
// 需要额外导入 svg writer
// go get github.com/yeqown/go-qrcode/writer/svg
wr := svg.NewWith(
"qrcode.svg",
svg.WithBgColorRGBHex("#FFFFFF"),
svg.WithFgColorRGBHex("#000000"),
svg.WithLogoImageFilePNG("logo.png", 100),
)
if err = qrc.Save(wr); err != nil {
log.Fatal(err)
}
}
3. 动态生成QR码并返回HTTP响应
func qrHandler(w http.ResponseWriter, r *http.Request) {
text := r.URL.Query().Get("text")
if text == "" {
text = "default content"
}
qrc, err := qrcode.New(text)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
wr := standard.NewWithWriter(w, standard.WithQRWidth(8))
w.Header().Set("Content-Type", "image/png")
if err = qrc.Save(wr); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
性能优化建议
-
复用QRCode对象:如果需要生成大量相似QR码,可以复用QRCode对象
-
选择合适的纠错级别:根据使用场景选择适当的纠错级别
ErrorCorrectionLow
(7%错误可恢复)ErrorCorrectionMedium
(15%)ErrorCorrectionQuart
(25%)ErrorCorrectionHighest
(30%)
-
控制模块大小:
WithQRWidth()
参数影响生成图片的大小和质量
与其他库的比较
go-qr相比其他Go QR码生成库有以下优势:
- 纯Go实现,无外部依赖
- 支持多种输出格式(PNG, SVG, 内存等)
- 丰富的自定义选项
- 高性能,支持并发生成
- 活跃的维护和社区支持
总结
go-qr是一个功能强大但使用简单的QR码生成库,适合各种场景下的QR码生成需求。通过简单的API调用即可生成高质量的QR码,并支持丰富的自定义选项。无论是简单的文本编码还是复杂的带logo的QR码,go-qr都能轻松应对。
更多高级用法和示例可以参考项目的GitHub仓库:github.com/yeqown/go-qrcode