首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ZXing 3.0 生成二維碼完整指南:API 變更與遷移實戰

     編輯:程式設計綜合問答

版本差異核心

ZXing 3.0 相比 2.x **重構了包結構、移除廢棄類、強化模塊化**。常見遷移問題:

  • 包路徑變更:`com.google.zxing.*` → 模塊化 `core`/`javase`/`android` 等。
  • `MatrixToImageWriter` 移至 `javase` 模塊。
  • `MultiFormatWriter` 編碼提示參數規範化。

Maven 依賴配置(關鍵)


<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.5.1</version> <!-- 最新穩定版 -->
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.5.1</version>
</dependency>

生成二維碼標準代碼 (ZXing 3.x)


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.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

public class QRCodeGenerator {
    public static void generate(String content, int width, int height, String filePath) throws Exception {
        Map hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");       // 指定編碼
        hints.put(EncodeHintType.MARGIN, 1);                    // 邊距
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 糾錯級別
        
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
        
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }
    
    public static void main(String[] args) throws Exception {
        generate("https://example.com", 300, 300, "qrcode.png");
    }
}

常見遷移錯誤對照表

2.x 代碼3.x 修正
`new QRCodeWriter()``new MultiFormatWriter()` (推薦統一入口)
`MatrixToImageWriter.writeToFile(...)``MatrixToImageWriter.writeToPath(..., "PNG", path)`
`hints.put(EncodeHintType.ERROR_CORRECTION, "H")``hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H)`
導入 `com.google.zxing.qrcode.*`僅需 `core` + `javase` 依賴,勿直接依賴內部實現包

進階功能:Logo 嵌入、顏色自定義

ZXing 僅生成黑白矩陣,**Logo/顏色需後處理**:


// 1. 生成 BitMatrix
// 2. 轉 BufferedImage
BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
// 3. Graphics2D 繪製 Logo、修改像素顏色
Graphics2D g = image.createGraphics();
// 繪製 Logo 圖片居中
// 修改顏色:遍歷像素,將黑色替換為品牌色
// 4. ImageIO.write(image, "PNG", file);

Android 專用依賴


implementation 'com.google.zxing:core:3.5.1'
implementation 'com.google.zxing:android-core:3.5.1' // 包含 MatrixToImageWriter 等
// 或使用 Google ML Kit Barcode Scanning (更現代)

總結

ZXing 3.0 遷移核心:**更新 Maven 坐標、使用 `MultiFormatWriter`、`MatrixToImageWriter.writeToPath`、正確設置 `EncodeHintType`**。掌握核心流程「內容 → Hint → BitMatrix → 圖片文件」,即可靈活應對版本變更。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved