二维码工具-QrCodeUtil
# 由来
由于大家对二维码的需求较多,对于二维码的生成和解析我认为应该作为简单的工具存在于Hutool中。考虑到自行实现的难度,因此Hutool针对被广泛接受的zxing (opens new window)库进行封装。而由于涉及第三方包,因此归类到extra模块中。
# 使用
# 引入zxing
考虑到Hutool的非强制依赖性,因此zxing需要用户自行引入:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing.version}</version>
</dependency>
说明 zxing-3.5.1是此文档编写时的最新版本,理论上你引入的版本应与此版本一致或比这个版本新。
# 生成二维码
在此我们将Hutool主页的url生成为二维码,微信扫一扫可以看到H5主页哦:
// 生成指定url对应的二维码到文件,宽和高都是300像素
QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("d:/qrcode.jpg"));
效果qrcode.jpg:
# 自定义参数(since 4.1.2)
- 基本参数设定
通过QrConfig
可以自定义二维码的生成参数,例如长、宽、二维码的颜色、背景颜色、边距等参数,使用方法如下:
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("e:/qrcode.jpg"));
效果qrcode.jpg:
- 附带logo小图标
QrCodeUtil.generate(//
"http://hutool.cn/", //二维码内容
QrConfig.create().setImg("e:/logo_small.jpg"), //附带logo
FileUtil.file("e:/qrcodeWithLogo.jpg")//写出到的文件
);
效果如图:
- 调整纠错级别
很多时候,二维码无法识别,这时就要调整纠错级别。纠错级别使用zxing的ErrorCorrectionLevel
枚举封装,包括:L、M、Q、H几个参数,由低到高。低级别的像素块更大,可以远距离识别,但是遮挡就会造成无法识别。高级别则相反,像素块小,允许遮挡一定范围,但是像素块更密集。
QrConfig config = new QrConfig();
// 高纠错级别
config.setErrorCorrection(ErrorCorrectionLevel.H);
QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.file("e:/qrcodeCustom.jpg"));
效果如图:
# 识别二维码
// decode -> "http://hutool.cn/"
String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));
# 生成SVG矢量图二维码(since 5.8.6)
QrConfig qrConfig = QrConfig.create().setImg("d:/test/logo.png")
.setForeColor(Color.blue)
.setBackColor(Color.pink)
.setRatio(8)
.setErrorCorrection(ErrorCorrectionLevel.M)
.setMargin(1);
String svg = QrCodeUtil.generateAsSvg("https://hutool.cn/", qrConfig);
效果如图:
# 生成Ascii Art字符画二维码(sincec 5.8.6)
QrConfig qrConfig = QrConfig.create()
.setForeColor(Color.BLUE)
.setBackColor(Color.MAGENTA)
.setWidth(0)
.setHeight(0).setMargin(1);
String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/",qrConfig);
生成的二维码字符画文本:
[38;5;21;48;5;201m█▀▀▀▀▀▀▀█▀█▀█▀█▀█▀█▀▀▀▀▀▀▀█[0;39m
[38;5;21;48;5;201m█ █▀▀▀█ █▀▄▀▄ ▄▀ ▀█ █▀▀▀█ █[0;39m
[38;5;21;48;5;201m█ █ █ █▀█▄█▄▄▀▄ █ █ █ █[0;39m
[38;5;21;48;5;201m█ ▀▀▀▀▀ █▀█ █ ▄▀▄▀█ ▀▀▀▀▀ █[0;39m
[38;5;21;48;5;201m██▀██▀█▀██▄▄▄▀█ ▄▀▀██▀█▀█▀█[0;39m
[38;5;21;48;5;201m█▄▀▀ ▀▀ ▀▄▀█ ▀▀▀█████▀ ▀ █[0;39m
[38;5;21;48;5;201m█ ▄▄▀ ▄▀███▀ █▄█▄▀ ▀▄▄█▄▀█[0;39m
[38;5;21;48;5;201m██▀ ▀▀█▀█▄ ▀▄▀█▄██▄▀ ▀▀▄███[0;39m
[38;5;21;48;5;201m█ ▄▄▄▄█▀█▀ ▀█▀ ▀▀▀ ▀ ▄ █[0;39m
[38;5;21;48;5;201m█▀▀▀▀▀▀▀██▀ █▄ ▀ █▀█ █ █▄█[0;39m
[38;5;21;48;5;201m█ █▀▀▀█ █▀▀█▄▄▀█▄ ▀▀▀ █▀▀█[0;39m
[38;5;21;48;5;201m█ █ █ ███▄█▀█▄█▀█▄▄▀█▄▄▄█[0;39m
[38;5;21;48;5;201m█ ▀▀▀▀▀ █▄▄█ ▀█▀▄ ██▀▀ █[0;39m
[38;5;21;48;5;201m▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀[0;39m
打印到控制台的效果:
上次更新: 2023/10/25, 14:44:30