当前位置: 首页 > news >正文

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.Net,TypeScript 有 zxing-js/library,Python 有 pyzxing,Rust 有 rxing,Dart 有 zxing-dart,PHP 有两个版本的移植,Ruby 有 zxing_cpp.rb,Delphi 有 ZXing.Delphi,Objective-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 不是白给的。十几年的打磨,覆盖了市面上绝大多数码制,社区移植版本遍布各语言平台。就算原项目不再活跃开发,它依然是条码识别这个领域里最稳的选择之一。

多数码制,社区移植版本遍布各语言平台。就算原项目不再活跃开发,它依然是条码识别这个领域里最稳的选择之一。

http://www.jsqmd.com/news/1106364/

相关文章:

  • Dockery:一个容器跑起来,就是你的私有 Docker Registry
  • GitHub 53K Star 爆款:不用 JS 逆向,7 大平台数据一把抓
  • 2026 跨境云网融合服务商榜单:海外企业组网与安全运维推荐
  • 企业微信二次开发中的定期对账机制
  • 墨香情手游官方下载:重拾纯粹武侠情怀开启全新快意恩仇江湖征途
  • 2026年AIGC检测怎么过?5大检测平台对比+AI痕迹降低实战指南
  • ICM-42688-P与PIC18F4553在机器人控制与工业监测中的应用
  • 类比StandardServer, 抓住StandardService整体类依赖结构来理解
  • Better BibTeX架构解析:为LaTeX用户打造的企业级文献管理解决方案
  • 【节点】[Clamp节点]原理解析与实际应用
  • Kubernetes 核心机制与运维实践知识精要
  • 别折腾了!3步教你用标准 API 调通企业微信外部群机器人
  • Python 最大冤案:你以为 `await` 在“死等”?它其实在
  • 如何轻松地从 iPhone 备份恢复 iPad?
  • 任务计划程序不显示后边的信息
  • 墨香情手游官方下载:均衡稳定经济生态适配养老休闲打金玩家群体
  • 张鹏翔在AI营销实战方法论沙龙上详解智能体如何助力企业长效流量增长
  • Apache SeaTunnel 搞定瀚高数据库读写一把过
  • SPI EEPROM与MCU高速数据检索方案解析
  • 如何把报告错误消灭在出稿前?AI报告审核结合IACheck实现前置校验
  • 好用还专业!盘点2026年最强的的降AI率软件
  • 别再建一个无人问津的知识库:用AI原生平台打造活文档系统
  • CSS定位:relative、absolute、fixed、sticky
  • 2024年南安多功能太阳能路灯选购指南:3招教你挑对好产品
  • LTE Cat 1bis模组LEXI-R10401D与PIC18F96J94的物联网开发实践
  • 终极免费微信网页版插件:5分钟实现跨设备聊天自由
  • 学无止境--linux 注册虚拟网卡将SDK(厂商)上送至CPU的报文注入协议栈
  • LV3296与dsPIC30F3014在工业数据采集中的高效应用
  • ROS2基本操作指令:从“节点”到“机器人”的完整工具箱
  • SickOs-1.1靶机渗透