前公司中登录设备时,需要下发密钥,密钥是通过扫描终端中的二维码获得的,终端中的二维码类似这样:
当时没理解原理,现在研究了下如何在命令行中打印二维码。主要介绍其中一些开源工具:
1. qrencode
简介
qrencode
是一个广泛使用的命令行工具,用于将文本数据编码为二维码。它支持多种输出格式,包括终端显示、PNG图片和EPS矢量图。
安装
在不同操作系统上的安装方法:
-
Ubuntu/Debian:
sudo apt-get update sudo apt-get install qrencode
-
macOS (通过 Homebrew):
brew install qrencode
-
Windows: 比较麻烦,需要编译,或者可以尝试 Chocolatey 安装。
使用示例
-
在终端显示二维码:
qrencode -t ANSI "https://www.example.com"
-
生成 PNG 图片:
qrencode -o example.png "https://www.example.com"
-
生成 EPS 文件:
qrencode -o example.eps -t EPS "https://www.example.com"
2. TermQR
简介
TermQR
是一个专为终端设计的二维码生成工具,能够在命令行中以ASCII字符形式显示二维码,适合在纯文本环境下使用。
安装
TermQR
可以通过 GitHub 获取并安装:
git clone https://github.com/edoardottt/termqr.git cd termqr make sudo make install
使用示例
termqr "https://www.example.com"
3. qrcode (Python 库)
简介
qrcode
是一个用 Python 编写的库,可以方便地在命令行中生成二维码。它支持多种输出格式,包括终端显示和图片文件。
安装
确保已安装 Python,然后使用 pip
安装:
pip install qrcode[pil]
使用示例
-
生成并在终端显示二维码:
import qrcode import sys qr = qrcode.QRCode() qr.add_data("https://www.example.com") qr.make(fit=True) qr.print_ascii()
-
生成 PNG 图片:
import qrcode img = qrcode.make("https://www.example.com") img.save("example.png")
4. zint
简介
zint
是一个功能强大的条码生成器,支持多种条码格式,包括二维码。它适用于需要生成多种条码类型的用户。
安装
在不同操作系统上的安装方法:
-
Ubuntu/Debian:
sudo apt-get update sudo apt-get install zint
-
macOS (通过 Homebrew):
brew install zint
-
Windows: 可以从 zint 的官方网站 下载预编译的二进制文件。
使用示例
-
生成二维码 PNG 图片:
zint -d "https://www.example.com" -o example.png -b 20
-
在终端显示二维码(需要配合其他工具,如 ASCII 转换): 由于
zint
本身不直接支持 ASCII 输出,可以结合zint
和catimg
等工具使用。
5. ascii_qr
简介
ascii_qr
是一个专门用于生成ASCII艺术二维码的工具,适合在纯文本环境中显示二维码。
安装
可以通过 GitHub 获取并安装:
git clone https://github.com/bronson/ascii_qr.git cd ascii_qr make sudo make install
使用示例
ascii_qr "https://www.example.com"
6. qr (Go 语言实现)
简介
qr
是一个用 Go 语言编写的简单命令行二维码生成工具,支持终端显示和图片输出。
安装
确保已安装 Go,然后使用 go get
安装:
go get github.com/Baozisoftware/qrcode-terminal-go
使用示例
qr "https://www.example.com"
比较表
工具 | 语言 | 输出格式 | 特点 | 安装难易度 |
---|---|---|---|---|
qrencode | C | ANSI、PNG、EPS | 功能全面,支持多种输出格式 | 简单 |
TermQR | C++ | ASCII | 专为终端设计,适合纯文本环境 | 中等 |
qrcode | Python | ASCII、PNG等 | 易于集成到Python脚本中,灵活性高 | 简单 |
zint | C | 多种图像格式 | 支持多种条码类型,功能强大 | 简单 |
ascii_qr | C | ASCII | 专注于ASCII艺术二维码,简单易用 | 中等 |
qr (Go) | Go | ASCII、PNG | 简单快速,适合Go开发者 | 中等 |
选择建议
- 需要多种输出格式:
qrencode
和zint
是不错的选择,功能全面,支持多种图像格式。 - 纯文本环境下显示:
TermQR
和ascii_qr
专为终端设计,能够以ASCII字符显示二维码。 - Python 集成:如果您使用Python进行开发,
qrcode
库提供了灵活的接口,适合脚本化生成二维码。 - Go 语言用户:
qr
工具适合Go开发者,简单快速。
示例演示
使用 qrencode
在终端显示二维码
qrencode -t ANSI "https://www.example.com"
这是我在我的openwrt路由器中输出的效果:
使用 qrencode
生成 PNG 图片
qrencode -o example.png "https://www.example.com"
生成的 example.png
将包含对应的二维码图像。
结论
在命令行中生成二维码有多种开源工具可供选择,您可以根据具体需求选择最适合的工具。无论是需要多种输出格式、在终端中显示,还是集成到脚本中,都能找到合适的解决方案。上述工具均为开源项目,您可以根据自己的需求进行进一步的定制和扩展。
如果您有其他推荐或使用经验,欢迎在评论区分享!