写点什么

Go 语言中如何操作二维码?

作者:左诗右码
  • 2025-06-11
    上海
  • 本文字数:1884 字

    阅读完需:约 6 分钟

Go 语言中如何操作二维码?

二维码(QR Code)已经成为我们生活中不可或缺的一部分,无论是支付、登录还是信息共享,它们可以轻松地存储和传输各种类型的数据,从网站链接到名片信息,无所不能。在开发中,我们经常会遇到识别二维码的需求,那么用 Go 语言如何实现二维码识别呢?


今天这篇文章将从 工具选择代码实现实用案例 三个角度,手把手教你用 Go 语言完成二维码的 识别生成,一起来看看吧。



二维码识别的基本原理

二维码(QR Code)是一种二维的条形码,能够存储比传统条形码更多的信息。它由黑白相间的图案组成,通过特定的编码规则将数据编码成图像。识别二维码的过程,就是通过图像处理技术,从二维码图像中提取出编码的信息。


识别二维码的核心是:


  1. 读取图片的像素数据。

  2. 找到二维码的矩阵位置。

  3. 解码出其中的内容。


有很多二维码识别工具已经封装好了这些复杂的步骤,我们只需要调用它们的接口即可。



选择适合的工具库

今天我们使用的是 https://github.com/makiuchi-d/gozxing 库,它是一个 Go 语言实现的 ZXing 库。ZXing 是一个成熟的开源条形码、二维码处理库,支持多种格式的条形码和二维码。

为什么选择 gozxing

  • 功能强大:支持多种条形码和二维码格式。

  • 高效稳定:基于 Java 的 ZXing 转写,性能优异。

  • 使用简单:API 设计清晰,容易上手。



识别二维码

下面我们用 gozxing 实现二维码识别的完整流程,分步骤讲解。

1. 安装依赖

首先,在你的项目中添加 gozxing 依赖:


go get -u github.com/makiuchi-d/gozxing
复制代码


同时,为了处理图片文件,还需要用到 imageimage/jpeg 等标准库。( 一般这些库是 Go 内置的)

2. 读取并识别二维码

以下是完整代码实现:


package main
import ( "fmt" "os"
"github.com/makiuchi-d/gozxing" "github.com/makiuchi-d/gozxing/qrcode" "image" _ "image/jpeg" // 支持 JPEG 格式 _ "image/png" // 支持 PNG 格式)
func main() { // 1. 打开二维码图片 file, err := os.Open("qrcode.png") // 替换为你的二维码图片路径 if err != nil { fmt.Println("无法打开图片:", err) return } defer file.Close()
// 2. 解码图片 img, _, err := image.Decode(file) if err != nil { fmt.Println("无法解码图片:", err) return }
// 3. 创建二维码解码器 bmp, err := gozxing.NewBinaryBitmapFromImage(img) if err != nil { fmt.Println("无法创建二维码位图:", err) return }
// 4. 识别二维码 qrReader := qrcode.NewQRCodeReader() result, err := qrReader.Decode(bmp, nil) if err != nil { fmt.Println("二维码识别失败:", err) return }
// 5. 输出二维码内容 fmt.Println("二维码内容:", result.GetText())}
复制代码



代码详细解析

1. 打开图片文件

我们通过 os.Open 打开二维码图片文件,并使用标准库的 image 解码图片格式。这一步支持多种图片格式(如 PNG、JPEG 等)。

2. 转换为二进制位图

gozxing.NewBinaryBitmapFromImage 将图片数据转化为可以被二维码识别器理解的二进制矩阵。

3. 调用二维码解码器

qrcode.NewQRCodeReader 是一个专门处理二维码的解码器。我们将位图数据传给它的 Decode 方法,完成识别。

4. 获取结果

识别成功后,通过 result.GetText() 可以获得二维码中的信息内容。



运行效果

示例图片

假设我们有一个二维码图片 qrcode.png,其中包含以下文本:



关注博主的人最帅!
复制代码

运行结果

当我们运行上述代码时,会输出:


二维码内容: 关注博主的人最帅!
复制代码



处理更多格式和错误

1. 支持其他图片格式

如果你的二维码图片是 BMP 或 GIF 格式,可以通过引入对应的解码库:


_ "image/gif"  // 支持 GIF_ "image/bmp"  // 支持 BMP
复制代码

2. 处理错误提示

二维码识别可能失败,常见原因包括:


  • 图片模糊或损坏。

  • 二维码大小过小,导致无法识别。

  • 图片格式不支持。


在实际项目中,我们可以通过错误日志和提示信息引导用户上传合适的图片。



生成二维码

除了识别二维码外,我们还可以用 Go 生成二维码,例如使用 github.com/skip2/go-qrcode 库。


安装库


go get -u github.com/skip2/go-qrcode/...
复制代码


示例代码:


package main
import ( "fmt"
"github.com/skip2/go-qrcode")
func main() { err := qrcode.WriteFile("关注博主的人最帅!", qrcode.Medium, 256, "qrcode.png") if err != nil { fmt.Println("生成二维码失败:", err) } fmt.Println("二维码已生成: qrcode.png")}
复制代码



总结

通过 gozxing,我们可以非常方便地在 Go 项目中实现二维码识别。如果你想生成二维码,还可以借助 go-qrcode 库来实现。


如果你觉得本文对你有帮助,欢迎点赞、转发支持!😄

发布于: 16 分钟前阅读数: 7
用户头像

左诗右码

关注

全网同名,欢迎关注交流。 2018-11-22 加入

三观比五官更正,思想比套路更深。常用技术栈PHP、Go、Python,享受编程,平时爱好写点文章。V公主号:「左诗右码」,欢迎关注交流。

评论

发布
暂无评论
Go 语言中如何操作二维码?_左诗右码_InfoQ写作社区