二维码工具 - QrCodeUtil
# 二维码工具 - QrCodeUtil
简介
QrCodeUtil
是 Hutool 提供的一个方便生成和解析二维码的工具类。它基于 zxing (opens new window) 库进行封装,支持生成二维码、解析二维码、生成带 Logo 的二维码等功能。考虑到 Hutool 的非强制依赖性,zxing 需要用户自行引入。
# 依赖引入
在 Maven 项目中使用 QrCodeUtil
工具类,需要添加以下依赖:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing.version}</version>
</dependency>
2
3
4
5
提示:
zxing-3.5.1
是此文档编写时的最新版本,建议引入与此版本一致或更新的版本。
# 1. 生成二维码
示例:生成一个普通的二维码
以下代码展示了如何生成一个指定 URL 对应的二维码,并保存为图片文件:
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.core.io.FileUtil;
public class QrCodeExample {
public static void main(String[] args) {
// 生成二维码到指定文件,宽和高都是300像素
QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("d:/qrcode.jpg"));
}
}
2
3
4
5
6
7
8
9
效果图:
QrCodeUtil.generate(String content, int width, int height, File file)
:生成一个二维码并保存为图片。content
:二维码的内容,可以是 URL、文本等。width
和height
:二维码的宽度和高度。file
:保存二维码图片的文件路径。
作用: 用于生成二维码,并将其保存为图片文件,适用于各种场景,如在网站上展示二维码、生成可供下载的二维码等。
实际开发场景: 生成网站、商品、个人名片等二维码。
# 2. 自定义参数生成二维码
示例:设置二维码的边距、颜色和背景色
通过 QrConfig
可以自定义二维码的生成参数,例如边距、前景色、背景色等:
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import cn.hutool.core.io.FileUtil;
import java.awt.Color;
public class QrCodeExample {
public static void main(String[] args) {
// 配置二维码参数
QrConfig config = new QrConfig(300, 300);
config.setMargin(3); // 设置边距
config.setForeColor(Color.CYAN.getRGB()); // 设置前景色
config.setBackColor(Color.GRAY.getRGB()); // 设置背景色
// 生成二维码并保存到文件
QrCodeUtil.generate("http://hutool.cn/", config, FileUtil.file("d:/qrcode_custom.jpg"));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
效果图:
QrConfig(int width, int height)
:用于设置二维码的宽度和高度。setMargin(int margin)
:设置二维码的边距。setForeColor(int color)
:设置二维码的前景色。setBackColor(int color)
:设置二维码的背景色。作用: 用于根据需求自定义二维码的外观,如调整二维码颜色、增加边距等。
实际开发场景: 生成与品牌颜色匹配的二维码,增加视觉识别度。
# 3. 生成带 Logo 的二维码
示例:生成一个带 Logo 的二维码
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import cn.hutool.core.io.FileUtil;
public class QrCodeExample {
public static void main(String[] args) {
// 生成二维码并附带Logo
QrCodeUtil.generate(
"http://hutool.cn/",
QrConfig.create().setImg("d:/logo_small.jpg"), // 设置Logo
FileUtil.file("d:/qrcodeWithLogo.jpg") // 保存二维码
);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
效果图:
setImg(String imgPath)
:用于设置二维码中心的 Logo。作用: 在二维码中嵌入 Logo,提升二维码的品牌识别度。
实际开发场景: 在品牌推广、名片设计中,嵌入品牌 Logo 的二维码常用于提高用户识别率。
# 4. 识别二维码
示例:解析一个二维码图片的内容
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.core.io.FileUtil;
public class QrCodeExample {
public static void main(String[] args) {
// 解析二维码内容
String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));
System.out.println("二维码内容: " + decode); // 输出: https://hutool.cn/
}
}
2
3
4
5
6
7
8
9
10
QrCodeUtil.decode(File file)
:用于解析二维码图片中的内容。file
:二维码图片文件。- 返回值:二维码中的内容。
作用: 从二维码图片中提取信息,适用于扫描二维码、批量解析二维码等场景。
实际开发场景: 在用户上传二维码图片后,自动解析其中的信息,如提取网址、识别名片内容等。
# 5. 生成 SVG 矢量图二维码(since 5.8.6)
示例:生成 SVG 矢量图格式的二维码
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.Color;
public class QrCodeExample {
public static void main(String[] args) {
QrConfig qrConfig = QrConfig.create()
.setImg("d:/test/logo.png") // 设置 Logo
.setForeColor(Color.BLUE.getRGB()) // 设置前景色
.setBackColor(Color.PINK.getRGB()) // 设置背景色
.setErrorCorrection(ErrorCorrectionLevel.M) // 设置纠错级别
.setMargin(1); // 设置边距
String svg = QrCodeUtil.generateAsSvg("https://hutool.cn/", qrConfig);
System.out.println(svg);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
效果图:
generateAsSvg(String content, QrConfig config)
:生成 SVG 格式的二维码。content
:二维码的内容。config
:二维码配置,如边距、颜色等。
作用: 用于生成矢量化的二维码,适用于需要高分辨率、可缩放的场景。
实际开发场景: 在打印、品牌设计等需要高精度图形的场景中,SVG 格式的二维码非常实用。
# 6. 生成 ASCII Art 字符画二维码(since 5.8.6)
示例:生成 ASCII Art 字符画格式的二维码
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.Color;
public class QrCodeExample {
public static void main(String[] args) {
QrConfig qrConfig = QrConfig.create()
.setForeColor(Color.BLUE.getRGB()) // 设置前景色
.setBackColor(Color.MAGENTA.getRGB()) // 设置背景色
.setMargin(1); // 设置边距
String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/", qrConfig);
System.out.println(asciiArt);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
生成的二维码字符画:
[38;5;21;48;5;201m█▀▀▀▀▀▀▀█▀█▀█▀█▀█▀█▀▀▀▀▀▀▀█[0;39m
[38;5;21;48;5;201m█ █▀▀▀█ █▀▄▀▄ ▄▀ ▀█ █▀▀▀█ █[0;39m
[38;5;21;48;5;201m█ █ █ █▀█▄█▄▄▀▄ █ █ █ █[0;39m
...
2
3
4
打印效果图:
generateAsAsciiArt(String content, QrConfig config)
:生成 ASCII Art 格式的二维码。content
:二维码的内容。config
:二维码配置,如边距、颜色等。
作用: 将二维码以字符画形式呈现,适用于在命令行、控制台等文本环境下展示二维码。
实际开发场景: 在命令行工具、文本展示环境中输出二维码,特别适合嵌入 CLI 工具或文本输出中。
这样总结后,每个功能点都进行了详细说明,代码块中包含了详细注释,同时提供了实际开发中的应用场景和完整代码示例。如果你有其他功能需要,我会继续为你提供帮助!