更新记录
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 |
预处理后多码,mode ∈ binarize/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 /
@dcloudioCLI 完成。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12439287
赞赏 1934
赞赏
京公网安备:11010802035340号