ZXing(Zebra Crossing)简介
ZXing(发音为 “Zebra Crossing”)是一个开源的条形码/二维码处理库,支持多种格式的编解码,适用于 Java、Android、C++ 等平台。
1. 支持的条码格式
解码(读取)支持:
- QR Code
- Data Matrix
- Aztec
- PDF417
- UPC-A / UPC-E
- EAN-8 / EAN-13
- Code 39 / Code 93 / Code 128
- ITF (Interleaved 2 of 5)
编码(生成)支持:
主要支持 QR Code、Data Matrix、Aztec、PDF417、UPC/EAN 等常用格式。
2. ZXing 的核心组件
模块 | 语言 | 适用场景 |
---|---|---|
core |
Java | 核心编解码逻辑 |
javase |
Java | PC端Java应用(如Swing/AWT扫码) |
android-core |
Java (Android) | Android扫码集成 |
cpp |
C++ | C++版解码器(部分功能) |
3. ZXing Android 集成示例
(1) Gradle依赖
dependencies {
implementation 'com.google.zxing:core:3.5.2'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0' // UI封装库(可选)
}
(2) Kotlin/Java调用示例
扫描二维码:
val integrator = IntentIntegrator(this)
integrator.setPrompt("Scan a QR Code")
integrator.setOrientationLocked(false)
integrator.initiateScan()
生成二维码:
import com.google.zxing.BarcodeFormat
import com.google.zxing.MultiFormatWriter
fun createQRCode(content: String, width: Int, height: Int): Bitmap {
val bitMatrix = MultiFormatWriter().encode(
content,
BarcodeFormat.QR_CODE,
width,
height
)
val pixels = IntArray(width * height)
for (y in 0 until height) {
for (x in 0 until width) {
pixels[y * width + x] = if (bitMatrix[x, y]) Color.BLACK else Color.WHITE
}
}
return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.RGB_565)
}
4. ZXing C++版使用
ZXing提供C++版本 (zxing-cpp
),适合跨平台开发:
git clone https://github.com/zxing-cpp/zxing-cpp.git
cd zxing-cpp && mkdir build && cd build
cmake .. && make -j4
示例代码:读取图片中的条码:
#include <zxing/BarcodeFormat.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/ImageSource.h>
auto image = ImageSource::load("qrcode.png");
auto reader = MultiFormatReader();
auto result = reader.read(*image);
std::cout << "Decoded Text: " << result.text() << std::endl;
5. ZXing vs OpenCV vs MLKit
特性 | ZXing | OpenCV | Google ML Kit |
---|---|---|---|
主要用途 | 条码解析 | CV通用算法 | AI+条码识别 |
速度 | ⚡️快 | 🐢慢 | ⚡️快 |
离线能力 ✅是 ✅是 ❌需Google Play服务 |
👉 推荐选择:
- Android优先用ZXing或ML Kit。
- C++跨平台选ZXing-CPP。
6. FAQ常见问题
❓ Q1: ZXin能识别模糊的二维码吗?
→ A1: ZXin对低分辨率或部分遮挡的条码识别较弱,可尝试预处理图像(如锐化)。
❓ Q2: iOS能用ZXin吗?
→ A2: iOS建议用原生 AVFoundation
+ CIDetector
,或跨平台的 Swift port。
❓ Q3: Web端如何集成? → A3: JS版可用 @zxing/library
。
官方GitHub:https://github.com/zxling/zxin
内容由零声教学AI助手提供,问题来源于学员提问