Java中使用ZXing和QRCode生成二維碼的示例詳解
1. 基本知識
生成二維碼在Java中有多種方法,常用的是通過第三方庫來實現(xiàn),比較流行的庫包括 ZXing (Zebra Crossing) 和 QRCode
ZXing庫中的核心API
MultiFormatWriter.encode():生成二維碼矩陣MatrixToImageWriter.writeToPath():將二維碼矩陣保存為圖片文件
QRCode庫中的核心API
- QRCode.from(content):從內容生成二維碼
- withSize(width, height):設置二維碼的尺寸
- file():生成二維碼并保存為圖片文件
ZXing庫功能強大,適合生成復雜的二維碼且提供了細粒度的控制
QRCode庫使用簡單,快速生成二維碼,適合基礎需求
二維碼是一種將信息編碼為二維圖形的技術,常用于存儲URL、文本、數字等信息。它由黑白模塊組成,通??梢酝ㄟ^掃描來解碼
生成二維碼的過程主要分為兩個步驟:
- 編碼:將需要存儲的信息(如URL、文本等)編碼為二維碼的黑白模塊
- 繪制:根據編碼信息繪制出二維碼圖像,通常可以保存為PNG、JPG等格式
使用ZXing生成二維碼 ZXing是最常用的Java二維碼生成庫,支持多種格式(例如二維碼、條形碼)
其核心類包括:
MultiFormatWriter:用于生成二維碼的核心類BitMatrix:二維碼的矩陣表示,用于保存黑白模塊的分布MatrixToImageWriter:將二維碼矩陣轉化為圖片
二維碼的參數設置
- 寬度和高度:二維碼圖片的尺寸,通常是正方形
- 編碼字符集:通常使用UTF-8編碼,確保支持中文等特殊字符
- 錯誤糾正級別:二維碼的容錯能力,可以通過調整糾錯級別提高二維碼的魯棒性
2. ZXing
依賴庫配置(Maven項目)
在Maven項目中,需要在pom.xml中添加ZXing的依賴:
<dependencies>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
Demo如下:
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Writer;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class QRCodeGenerator {
public static void main(String[] args) {
// 要編碼的文本
String data = "Hello, QR Code!";
// 生成的二維碼圖片文件路徑
String filePath = "qrcode.png";
try {
// 調用生成二維碼的方法
generateQRCodeImage(data, 300, 300, filePath);
System.out.println("二維碼生成成功!");
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
/**
* 生成二維碼圖像并保存到文件
*
* @param text 要編碼的文本
* @param width 圖像寬度
* @param height 圖像高度
* @param filePath 保存文件路徑
* @throws WriterException 生成二維碼異常
* @throws IOException IO異常
*/
private static void generateQRCodeImage(String text, int width, int height, String filePath)
throws WriterException, IOException {
// 創(chuàng)建 QRCodeWriter 實例
QRCodeWriter qrCodeWriter = new QRCodeWriter();
// 生成 BitMatrix,表示二維碼的黑白矩陣
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
// 創(chuàng)建一個 BufferedImage,用于繪制圖像
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.createGraphics();
// 獲取圖形上下文
Graphics2D graphics = (Graphics2D) image.getGraphics();
// 設置背景色為白色
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, width, height);
// 設置前景色為黑色
graphics.setColor(Color.BLACK);
// 在圖像上繪制二維碼的黑色矩陣
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (bitMatrix.get(i, j)) {
// 如果當前位置為黑色,填充一個像素
graphics.fillRect(i, j, 1, 1);
}
}
}
// 將圖像保存為 PNG 文件
ImageIO.write(image, "png", new File(filePath));
}
}
截圖如下:

另外一個Demo:
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
public class QRCodeGenerator {
/**
* 生成二維碼
* @param content 二維碼中包含的內容,如URL或文本
* @param width 二維碼的寬度
* @param height 二維碼的高度
* @param filePath 保存二維碼圖片的路徑
* @throws Exception 可能拋出的異常
*/
public static void generateQRCode(String content, int width, int height, String filePath) throws Exception {
// 定義二維碼的參數
Map<EncodeHintType, Object> hints = new HashMap<>();
// 設置編碼字符集
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
// 設置二維碼的容錯級別,較高容錯級別適合損壞或部分覆蓋的二維碼
hints.put(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
// 生成二維碼的BitMatrix(二維碼的矩陣表示)
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
// 將二維碼矩陣保存為圖片文件
Path path = Paths.get(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
System.out.println("二維碼已成功生成,保存路徑: " + filePath);
}
public static void main(String[] args) {
try {
// 生成二維碼的內容
String content = "https://www.example.com";
// 設置二維碼的寬度和高度
int width = 300;
int height = 300;
// 保存二維碼圖片的路徑
String filePath = "qr_code.png";
// 調用生成二維碼方法
generateQRCode(content, width, height, filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. QRCode
在Maven項目中,需要在pom.xml中添加QRCode的依賴:
以上就是Java中使用ZXing和QRCode生成二維碼的示例詳解的詳細內容,更多關于Java ZXing和QRCode生成二維碼的資料請關注腳本之家其它相關文章!
相關文章
Java8優(yōu)雅的字符串拼接工具類StringJoiner實例代碼
這篇文章主要給大家介紹了關于Java8優(yōu)雅的字符串拼接工具類StringJoiner的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
如何自定義Mybatis-Plus分布式ID生成器(解決ID長度超過JavaScript整數安全范圍問題)
MyBatis-Plus默認生成的是 64bit 長整型,而 JS 的 Number 類型精度最高只有 53bit,這篇文章主要介紹了如何自定義Mybatis-Plus分布式ID生成器(解決ID長度超過JavaScript整數安全范圍問題),需要的朋友可以參考下2024-08-08
淺析SpringCloud Alibaba-Nacos 作為注冊中心示例代碼
這篇文章主要介紹了SpringCloud Alibaba-Nacos 作為注冊中心示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
SpringSecurity+Redis+Jwt實現(xiàn)用戶認證授權
SpringSecurity是一個強大且靈活的身份驗證和訪問控制框架,本文主要介紹了SpringSecurity+Redis+Jwt實現(xiàn)用戶認證授權,具有一定的參考價值,感興趣的可以了解一下2024-07-07

