更新记录

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/heightsize 标称值(同上 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 / generateSvgcontent 为空时抛参数错误;入参 size / marginnumber 传入,桥接层做范围与类型安全转换(须为非负整数且 ≤ 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/heightgenerate 为实际渲染像素宽高,generateSvgsize 标称值。
  • QrResult.sizeBytes:写入文件字节数(PNG / SVG 各自的文件大小)。
  • QrResult.costMs:只计「处理段」耗时(毫秒,不含磁盘 IO)。
  • decode 文件读不了 / 非图片时抛错(Io / Decode);图中无二维码返回空数组
  • generateWithLogo:以 EcLevel::H 高容错生成,中心嵌 logo + 白底留白保证可扫;logoScale 相对二维码边长,钳制到 0.05..=0.3(≤0 或非有限抛 InvalidParam);logoPath 读不到抛 Io、非图片抛 Generatewidth/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 / @dcloudio CLI 完成。

隐私、权限声明

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

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

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

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

暂无用户评论。