更新记录
1.0.0(2026-07-19)
首发:自研 编写高性能二维码核心(生成 PNG / 生成 SVG / 识别解码),经 原生绑定层 生成 Kotlin/Swift 绑定,桥接为 uni-app 可调的
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | 12 | × | × |
nex-qrcode —— 高性能 二维码
自研高性能二维码核心(生成 PNG / 生成 SVG / 识别解码),经原生绑定层提供, 桥接层,把能力暴露成 uni-app 可调的 JS API。仅支持 App 端(Android / iOS),H5 / 小程序加载不了原生库。
同一份 utssdk 插件同时支持 uni-app x(uvue) 与 经典 uni-app(vue3),无需分叉。 全部 路径进 / 路径出:传
content/src/dest文件路径,原生层读写文件 → 处理 → 返回结果,避免大图 buffer 跨语言边界 / JS。
API
| JS API | 签名 | 说明 |
|---|---|---|
generate |
generate(content, dest, size, margin): QrResult |
生成二维码渲染为 PNG 写入 dest;size 为目标边长(像素,最小尺寸,上限 8192),margin 为白边开关(>0 开默认约 4 模块白边 / =0 关白边,不支持自定义模块数) |
generateSvg |
generateSvg(content, dest, size, margin): QrResult |
生成二维码渲染为 SVG 写入 dest;QrResult.width/height 填 size 标称值(同上 size 上限 / margin 语义) |
generateWithLogo |
generateWithLogo(content, dest, size, margin, logoPath, logoScale): QrResult |
高容错(EcLevel::H) 二维码中心嵌 logoPath 的 logo,logo 后铺白底留白保证可扫;logoScale 相对二维码边长,钳制到 0.05..=0.3(非有限/≤0 抛 InvalidParam);logoPath 读不到抛 Io,非图片抛 Generate。仅 PNG |
generateColored |
generateColored(content, dest, size, margin, fgColor, bgColor): QrResult |
品牌配色二维码:暗模块用 fgColor、亮模块用 bgColor(#RRGGBB / #RRGGBBAA,非法抛 InvalidParam)。仅 PNG |
decode |
decode(src): string[] |
识别图片中的所有二维码,返回内容数组(图中无二维码时返回空数组,不算错误) |
类型
// generate / generateSvg 返回(字段 camelCase)
type QrResult = { width: number; height: number; sizeBytes: number; costMs: number };
generate/generateSvg的content为空时抛参数错误;入参size/margin以number传入,桥接层做范围与类型安全转换(须为非负整数且 ≤ u32 上界),越界或类型不符时抛错。size输出边长上限为 8192 像素,超限抛InvalidParam(避免分配巨幅位图导致内存溢出 / 闪退)。margin为白边布尔开关,非自定义模块数:margin>0开启默认 quiet zone(库固定约 4 模块白边),margin=0关闭白边;传2/4等任意正值效果一致(都是固定约 4 模块白边),底层不支持自定义白边模块数。decode经 内置图像编解码 解码外部图片时设像素维度上限 8192(MAX_DECODE_DIMENSION)、单次分配上限 128MB(MAX_DECODE_ALLOC),超大/异常图被拒为可捕获的Decode错误而非进程闪退。QrResult.width/height:generate为实际渲染像素宽高,generateSvg为size标称值。QrResult.sizeBytes:写入文件字节数(PNG / SVG 各自的文件大小)。QrResult.costMs:只计「处理段」耗时(毫秒,不含磁盘 IO)。decode文件读不了 / 非图片时抛错(Io / Decode);图中无二维码返回空数组。generateWithLogo:以EcLevel::H高容错生成,中心嵌 logo + 白底留白保证可扫;logoScale相对二维码边长,钳制到0.05..=0.3(≤0 或非有限抛InvalidParam);logoPath读不到抛Io、非图片抛Generate。width/height为实际渲染像素宽高。generateColored:暗模块fgColor、亮模块bgColor,颜色为#RRGGBB/#RRGGBBAA(非法抛InvalidParam);为保证可扫请用「深前景 + 浅背景」。width/height为实际渲染像素宽高。
用法
import {
generate,
generateSvg,
generateWithLogo,
generateColored,
decode
} from "@/uni_modules/nex-qrcode";
// 生成二维码 PNG:目标边长 320,margin>0 → 开默认白边(约 4 模块 quiet zone)
const r = generate("https://example.com", destPngPath, 320, 4);
console.log(r.width, r.height, r.sizeBytes, r.costMs);
// 生成二维码 SVG:标称边长 320
const s = generateSvg("hello world", destSvgPath, 320, 4);
console.log(s.width, s.height, s.sizeBytes, s.costMs);
// 品牌二维码:中心嵌 logo(logo 占二维码边长 0.2),高容错保证可扫
const rl = generateWithLogo("https://example.com", destPngPath, 512, 4, logoPngPath, 0.2);
console.log(rl.width, rl.height);
// 品牌配色二维码:深靛蓝前景 + 白背景
const rc = generateColored("https://example.com", destPngPath, 320, 4, "#1A237E", "#FFFFFF");
console.log(rc.width, rc.height);
// 识别图片中的所有二维码
const contents = decode(srcImagePath); // string[],无二维码时为 []
contents.forEach((c) => console.log(c));
平台与调试边界
- 仅 app-android / app-ios;H5、各家小程序不支持。
- Android 本地真机调试 原生库 需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
- iOS 因 原生扩展库 含 Swift,宿主原生工程需开启「支持 Swift」。
- 最终 App 打包由 HBuilderX /
@dcloudioCLI 完成。

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