ZXing:一个扫描条码的基础库

发布时间:2026/7/2 3:25:02
ZXing:一个扫描条码的基础库 文章目录ZXing一个扫描条码的基础库这个库能干什么为什么要用它移植到其他语言怎么用现在的状态适合什么场景ZXing一个扫描条码的基础库zxing 在 GitHub 上拿了 33,996 Star。Google 开源的这个库专门做一件事识别和解码各种格式的条形码和二维码。Java 写的但已经被移植到几乎所有主流语言平台。这个库能干什么一句话把图片里的条码信息读出来。支持的格式覆盖面很广。一维码包括 UPC-A、UPC-E、EAN-8、EAN-13、Code 39、Code 93、Code 128、Codabar、ITF 这些常见的商品码和工业码。二维码包括 QR Code、Data Matrix、Aztec、PDF 417、MaxiCode还有 RSS-14 和 RSS-Expanded。基本上你在超市货架、快递包裹、登机牌、证件上看到的码它都能识别。为什么要用它做过条码识别功能的开发者都知道自己写一套解码逻辑有多麻烦。光照不均匀、角度倾斜、印刷模糊、多种码制混用每一种情况都要单独处理。ZXing 把这些底层问题都解决了你只需要传一张图片进去它返回解码结果。库本身是 Java 写的模块拆得很清晰。core 是核心解码逻辑javase 处理 JavaSE 平台的图像加载android 是 Android 客户端android-integration 通过 Intent 让其他 App 调用扫码功能。每个模块各司其职按需引入。移植到其他语言ZXing 原生是 Java但社区把它搬到了几乎所有你能想到的语言平台。C 移植有两个主要版本一个是 glassechidna/zxing-cpp另一个是更活跃的 zxing-cpp/zxing-cpp后者还提供了 Android、C、iOS、.NET、Rust、Python、WASM 和 WinRT 的绑定。.NET 平台有 ZXing.NetTypeScript 有 zxing-js/libraryPython 有 pyzxingRust 有 rxingDart 有 zxing-dartPHP 有两个版本的移植Ruby 有 zxing_cpp.rbDelphi 有 ZXing.DelphiObjective-C 有 ZXingObjC。基本上不管你用什么技术栈都能找到对应的版本。怎么用以 Java 为例Maven 引入 core 和 javase 两个模块就行。调用方式也简单读取图片文件创建 MultiFormatReader调用 decode 方法拿到 Result 对象里面就是解码后的文本内容。Android 上可以通过 Intent 集成不用自己写扫码界面。用户点一个按钮跳到 ZXing 的扫码 Activity结果通过 onActivityResult 回传。现在的状态这个项目目前处于维护模式。只接受 bug 修复和小改进没有新功能开发计划。Android 端的 Barcode Scanner 应用已经不适配 Android 14也不会再更新了。但维护模式不代表没价值。它的核心解码算法被大量第三方项目依赖很多扫码功能的底层都是 ZXing。那些语言移植版本也在持续更新zxing-cpp/zxing-cpp 这个 C 版本的活跃度就很高。适合什么场景需要在应用里加条码识别功能不想自己写解码算法的开发者做物联网、物流、零售系统需要批量处理条码数据的场景用的技术栈不是 Java但需要条码识别能力的团队可以找对应语言的移植版本需要同时支持多种码制不想为每种码单独集成库的项目33,996 Star 不是白给的。十几年的打磨覆盖了市面上绝大多数码制社区移植版本遍布各语言平台。就算原项目不再活跃开发它依然是条码识别这个领域里最稳的选择之一。多数码制社区移植版本遍布各语言平台。就算原项目不再活跃开发它依然是条码识别这个领域里最稳的选择之一。