说明
二维码本身是一个信息的载体,扫描二维码就可以打开里面的信息。这里介绍了利用hutool包生成二维码的技术。
引入依赖
hutool-extra包里面提供的生成二维码的方法本身是对zxing
库的一个封装,所以需要额外引入zxing
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
<version>5.8.28</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
最简单的生成
这是最简单的一种方式,直接通过内容来生成二维码(参数依次是: 内容、宽、高和保存路径):
public static void main(String[] args) {
QrCodeUtil.generate("https://www.baidu.com",300, 300, FileUtil.file("d:/easy.jpg"));
}
效果如下:
自定义一些样式
如果想要给二维码一些的个性化设置(hutool包的二维码定制化受限),比如二维码颜色、二维码底色、添加图片到二维码中等,可以创建一个QrConfig
对象config
,然后对config进行配置,并将config作为参数传入generate()
:
public static void main(String[] args) {
QrConfig config = new QrConfig(300, 300);
// 设置外边距
config.setMargin(20);
// 设置二维码颜色
// config.setForeColor(234);
// 设置底色
// config.setBackColor(234);
// 添加logo
config.setImg("D:\\存取数据\\壁纸\\一光叔叔\\古风篇\\6.jpg");
QrCodeUtil.generate("https://www.baidu.com",config, FileUtil.file("d:/moreConfig.jpg"));
}
效果如下:
设置纠错等级
另外,还可以给二维码设置纠错等级。纠错等级越高,二维码的像素块越小,越密集,这样的话即使有部分遮挡,也是可以识别出二维码的;相反,纠错等级越低,二维码的像素块越大,支持远距离识别,但是不允许遮挡。
纠错等级使用zxing
的ErrorCorrectionLevel
枚举报错,由低到高依次为: L、M、Q、H,默认为M。
public static void main(String[] args) {
QrConfig config = new QrConfig(300, 300);
config.setErrorCorrection(ErrorCorrectionLevel.H);
QrCodeUtil.generate("https://www.baidu.com",config, FileUtil.file("d:/errorLevel.jpg"));
}
效果如下:
识别简单的二维码
能生成二维码,也能识别二维码,通过decode
:
public static void main(String[] args) {
String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));
System.out.println(decode);
// https://www.baidu.com
}
但是只能识别简单的二维码,对于复杂一点的似乎就行不通了,比如用该方法识别微信名片的二维码
的话,得到的只是null
关于二维码的高级玩法,还是得从zxing库入手啊。