ZXing 3.0 相比 2.x **重構了包結構、移除廢棄類、強化模塊化**。常見遷移問題:
<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>
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` 依賴,勿直接依賴內部實現包 |
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);
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 → 圖片文件」,即可靈活應對版本變更。