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
效果圖如下: