Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
官方地址:https://hutool.cn/docs/#/
邮件文档地址:https://hutool.cn/docs/#/extra/%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%B7%A5%E5%85%B7-QrCodeUtil
一、添加依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
二、生成二维码
(1)生成简单的二维码
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QRcodeController {
private final static String URL = "https://my.oschina.net/piaoxianren/blog/4791620";
/**
* 生成简单二维码
* @return
*/
@GetMapping("/generateQRCode")
public String generateQRCode(){
QrCodeUtil.generate(URL, 300, 300, FileUtil.file("/Users/piao/Downloads/qrcode1.jpg"));
return "生成成功";
}
}
请求接口地址:http://127.0.0.1:8082/generateQRCode
效果图如下:
(2)生成附带logo二维码
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QRcodeController {
private final static String URL = "https://my.oschina.net/piaoxianren/blog/4791620";
/**
* 生成附带logo二维码
* @return
*/
@GetMapping("/generateImgQRcode")
public String generateImgQRcode(){
QrCodeUtil.generate(URL,
//附带logo
QrConfig.create().setImg("/Users/gongzhiqiang/Downloads/ylsb.jpg"),
FileUtil.file("/Users/gongzhiqiang/Downloads/qrcode2.jpg"));
return "生成成功";
}
}
请求接口地址:http://127.0.0.1:8082/generateImgQRcode
效果图如下:
(3)生成彩色二维码
通过QrConfig可以自定义二维码的生成参数,例如长、宽、二维码的颜色、背景颜色、边距等参数。
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.awt.*;
@RestController
public class QRcodeController {
private final static String URL = "https://my.oschina.net/piaoxianren/blog/4791620";
/**
* 生成彩色二维码
* @return
*/
@GetMapping("/generateColoursQRcode")
public String generateColoursQRcode(){
QrConfig config = new QrConfig(300, 300);
// 设置边距,既二维码和背景之间的边距
config.setMargin(3);
// 设置前景色,既二维码颜色(青色)
config.setForeColor(Color.CYAN);
// 设置背景色(灰色)
config.setBackColor(Color.GRAY);
// 生成二维码到文件,也可以到流
QrCodeUtil.generate(URL, config, FileUtil.file("/Users/gongzhiqiang/Downloads/qrcode3.jpg"));
return "生成成功";
}
}
请求接口地址:http://127.0.0.1:8082/generateColoursQRcode
效果图如下:
(4)调整纠错二维码
很多时候,二维码无法识别,这时就要调整纠错级别。纠错级别使用zxing的ErrorCorrectionLevel
枚举封装,包括:L、M、Q、H几个参数,由低到高。低级别的像素块更大,可以远距离识别,但是遮挡就会造成无法识别。高级别则相反,像素块小,允许遮挡一定范围,但是像素块更密集。
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QRcodeController {
private final static String URL = "https://my.oschina.net/piaoxianren/blog/4791620";
/**
* 调整纠错二维码
* @return
*/
@GetMapping("/adjustmentQRcode")
public String adjustmentQRcode(){
QrConfig config = new QrConfig();
// 高纠错级别
config.setErrorCorrection(ErrorCorrectionLevel.H);
QrCodeUtil.generate(URL, config, FileUtil.file("/Users/gongzhiqiang/Downloads/qrcode4.jpg"));
return "生成成功";
}
}
请求接口地址:http://127.0.0.1:8082/adjustmentQRcode
效果图如下:
(5)解析二维码
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QRcodeController {
/**
* 解析二维码
* @return
*/
@GetMapping("/analysisQRcode")
public String analysisQRcode(){
String decode = QrCodeUtil.decode(FileUtil.file("/Users/gongzhiqiang/Downloads/qrcode1.jpg"));
System.out.println("地址为:" + decode);
return "解析成功:" + decode;
}
}
请求接口地址:http://127.0.0.1:8082/adjustmentQRcode
效果图如下: