更新记录

1.0.0(2026-07-19)

首发:自研(多制式识别引擎 = ZXing 移植)写多格式条码/二维码识别核心,经 原生绑定层 生成 Kotlin/Swift 绑定,桥接为 uni-app 可调的


平台兼容性

uni-app x(5.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 × ×

nex-scanner —— 工业级条码 / 二维码识别

自研多格式条码 / 二维码识别核心, 桥接层,把能力暴露成 uni-app 可调的 JS API。仅支持 App 端(Android / iOS),H5 / 小程序加载不了原生库。

同一份 utssdk 插件同时支持 uni-app x(uvue)经典 uni-app(vue3),无需分叉。 区别于现有 nex-qrcode / nex-barcode(仅生成 + 单码):本插件专注识别,且支持 一图多码同扫按格式过滤DPM / 破损 / 反光预处理(Otsu 二值化 / 锐化 / 反色)。 数据形态:路径进 / JSON 字符串出——传图片文件路径,识别结果序列化为 JSON String,是本仓桥接最简单的一类(全 string 进出)。

API

JS API 签名 说明
scanMulti scanMulti(imagePath, formatsJson): string 一图多码 → JSON 数组;formatsJson 限定格式(空=全格式),无码 "[]"
scanSingle scanSingle(imagePath, formatsJson): string 单码(最快路径)→ JSON 对象;无码 "null"
scanWithPreprocess scanWithPreprocess(imagePath, mode): string 预处理后多码,modebinarize/sharpen/invert
supportedFormats supportedFormats(): string 受支持格式 JSON 数组
scannerCoreVersion scannerCoreVersion(): string 核心版本号

返回 JSON 形状

type ScanPoint = { x: number; y: number };
type ScanResult = { format: string; text: string; points: ScanPoint[] };

// scanMulti / scanWithPreprocess → ScanResult[](无码 "[]")
// scanSingle                      → ScanResult(无码 "null")
// supportedFormats                → string[](如 ["QR_CODE","CODE_128",...])
  • format 为 canonical token(QR_CODE / CODE_128 / EAN_13 / DATA_MATRIX ...),与 supportedFormats 输出、formatsJson 入参互通(大小写 / 别名不敏感)。
  • formatsJson 为字符串数组 JSON,如 '["QR_CODE","CODE_128"]';传 """[]" = 全格式。非法 JSON / 含未知格式名 → 抛参数错误。
  • 支持格式:QR / Micro-QR / Aztec / DataMatrix / PDF417 / MaxiCode(2D),Code39 / Code93 / Code128 / Codabar / ITF / EAN-8 / EAN-13 / UPC-A / UPC-E / RSS-14 / RSS-Expanded / Telepen / DXFilmEdge(1D)。
  • 预处理binarize=Otsu 全局二值化(DPM / 低对比);sharpen=unsharp mask 锐化(破损 / 模糊);invert=反色(反光 / 暗底亮码)。均为自研 像素级实现,在灰度图上处理后再识别。

用法

import {
  scanMulti, scanSingle, scanWithPreprocess, supportedFormats
} from "@/uni_modules/nex-scanner";

// 单码(最快)
const one = JSON.parse(scanSingle("/sdcard/a.png", ""));
if (one != null) console.log(one.format, one.text);

// 一图多码
const arr = JSON.parse(scanMulti("/sdcard/poster.jpg", "")) as Array<any>;
arr.forEach(r => console.log(r.format, r.text));

// 只找二维码
const qrs = JSON.parse(scanMulti("/sdcard/poster.jpg", '["QR_CODE"]'));

// 破损/反光:预处理后再扫
const fixed = JSON.parse(scanWithPreprocess("/sdcard/dpm.png", "binarize"));

资源限制与健壮性

  • 解码图片维度上限 16384×16384、单次分配上限 256 MiB;超限返回可捕获的解码错误,而非进程级 OOM(跨 原生绑定层 = App 闪退,JS 无法 try/catch)。
  • 不可信图片的解码与识别均用 catch_unwind 兜底:第三方库对抗性输入的内部 panic 被转成可捕获错误,绝不跨语言边界后 abort。
  • 文件缺失抛 Io;非图 / 损坏抛 Decode;参数非法抛 InvalidParam。无码不算错误(返回空数组 / null)。

平台与调试边界

  • app-android / app-ios;H5、各家小程序不支持。
  • Android 本地真机调试 原生库 需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
  • iOS 因 原生扩展库 含 Swift,宿主原生工程需开启「支持 Swift」。
  • 最终 App 打包由 HBuilderX / @dcloudio CLI 完成。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。所有计算/处理均在本地完成,无任何网络请求、不发送数据到任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。