更新记录

1.1.4(2026-10-18)

  • 修复二维码在鸿蒙端渲染失败。

1.1.3(2026-09-11)

  • 优化二维码渲染性能;
  • 完善文档说明。

1.1.2(2026-09-10)

  • 修复蒸汽模式鸿蒙uts语法问题。
查看更多

平台兼容性

uni-app x(4.83)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ √ √ √ √

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

umi-barcode-x

广告:

  • 魔法上网35元/月,有需求的可以联系我(稳定,支持 Clash Verge)。
  • 售卖CodeX账号,plus代充180元/月,有需求的可以联系我。
  • 售卖Claude Code账号以及代充,有需求的可以联系我。
  • vx: 781284440

二维码、条形码绘制组件。

  • APP(HarmonyOS / Android / iOS):系统原生生成码图(鸿蒙 ScanKit、Android ZXing、iOS CoreImage),以图片展示。
  • 微信小程序、支付宝小程序、抖音小程序、元服务:canvas type="2d" 绘制。

注意事项

本插件含 UTS 原生实现,Android、iOS 真机运行必须打自定义基座(标准基座不含本插件原生代码,会出现找不到模块、生成失败或保存相册异常)。鸿蒙走原生编译,无需自定义基座。

切换 VDOM / vapor(蒸汽模式) 后,渲染与原生桥接方式会变,必须重新制作自定义基座再运行。只改源码热更新、或只改 manifest.json 里的 vapor 而不重打基座,Android / iOS 上仍会用旧基座里的原生侧,表现会错乱。

其它:

  • Android 通过 utssdk/app-android/config.json 的 dependencies 引入 ZXing。更新依赖后必须重新制作并安装自定义基座;若出现 NoClassDefFoundError: com/google/zxing/EncodeHintType,请确认运行的是新基座,仅热更新源码无法补齐原生依赖。不要再手动放入 ZXing JAR,以免重复类冲突。
  • 加密后的普通授权版只能从 @/uni_modules/umi-barcode-x 导入,不要写 utssdk/、common/ 内部路径。
  • Android 保存相册不要给 WRITE_EXTERNAL_STORAGE 加 android:maxSdkVersion="28",改权限后也需重新运行(自定义基座要重打)。
  • Android 自定义事件载荷可能是 Map,不要直接读 e.path,见下方示例。

使用

easycom 自动引入:

<umi-barcode type="qrcode" value="https://uniapp.dcloud.net.cn/" :size="200" logo="/static/logo.png"></umi-barcode>
<umi-barcode type="barcode" format="code128" value="ABC-12345678" :width="280" :height="88"></umi-barcode>

也可调用原生生成 / 保存 API(仅 APP)。加密后的普通授权版只能从插件根目录导入,不要写 utssdk/、common/ 下的内部路径:

import { generateCode, saveCodeToAlbum, UmiBarcodeOkPayload, readAnyErrMsg } from '@/uni_modules/umi-barcode-x'

generateCode({
    content: 'hello',
    type: 'qrcode',
    width: 200,
    height: 200,
    logo: '/static/logo.png'
}).then((path : string) => {
    // path 为本地文件路径,可用于 image.src,或保存到相册
    saveCodeToAlbum(path).then((albumPath : string) => {
        uni.showToast({ title: '已保存到相册', icon: 'none' })
    })
})

组件绘制成功后会带上 path,也可直接保存。Android 上自定义事件参数是 Map,不要直接读 e.path:

function readEventPath(e : any) : string {
    if (e instanceof Map) {
        const raw = (e as Map<string, any>).get('path')
        if (raw == null) {
            return ''
        }
        return raw as string
    }
    const ok = e as UmiBarcodeOkEvent
    return ok.path
}
saveCodeToAlbum(readEventPath(e))

组件实例也可调用 download()(APP 内部走 saveCodeToAlbum;小程序 / 元服务会先导出 Canvas;Web 直接触发浏览器 PNG 下载,返回图片 data URL,成功表示已发起下载):

const codeRef = ref<UmiBarcodeComponentPublicInstance | null>(null)
const inst = codeRef.value
if (inst != null) {
    const job = inst.download?.()
    if (job != null) {
        job.then((albumPath : string) : void => {})
    }
}

属性

属性 类型 默认值 说明
value string '' 码内容
type 'qrcode' | 'barcode' 'qrcode' 二维码或条形码
format string '' 条码格式,默认二维码为 qrcode,条形码为 code128
size number 200 二维码边长(px);未传 width/height 时使用
width number 0 画布宽度(px)
height number 0 画布高度(px)
margin number 2 静区(模块数,鸿蒙原生范围为 1–10)
foreground string '#000000' 前景色
background string '#FFFFFF' 背景色
level 'L' | 'M' | 'Q' | 'H' 'M' 二维码纠错等级。设置 logo 时会自动使用 H
logo string '' 二维码中心 logo 路径,如 /static/logo.png
logoSize number 0.22 logo 大小:≤1 为占短边比例,>1 为像素;最大约 32%
logoPadding number 6 logo 周围留白(px)
logoBackground string '#FFFFFF' logo 留白底色
logoRadius number 8 logo 与留白圆角(px)

事件

  • success:绘制成功,{ width, height, path }(APP 上 path 为本地码图路径)
  • fail:绘制失败,{ errMsg }

下载

API 说明
saveCodeToAlbum(filePath) 把本地码图保存到系统相册
组件 download() 保存当前展示的码图

APP 需相册写入权限(iOS NSPhotoLibraryAddUsageDescription,鸿蒙图库写入)。Android 在 manifest.json 的 app-android.distribute.permissions 声明存储权限,不要加 android:maxSdkVersion="28",否则 saveImageToPhotosAlbum 会抛 IllegalArgumentException。

"app-android": {
  "distribute": {
    "permissions": [
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
      "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"
    ]
  }
}

微信小程序不要在 app.json / manifest.json 的 permission 里写 scope.writePhotosAlbum,基础库会报「无效的 app.json permission」。相册写入只需在微信公众平台「用户隐私保护指引」中声明保存到相册;调用 saveImageToPhotosAlbum 时由微信弹授权。permission 目前只用于 scope.userLocation、scope.userLocationBackground、scope.userFuzzyLocation。

格式支持

格式 APP 原生 Canvas 2D
qrcode √ √
code128 √ √
code39 / ean13 / ean8 / upc_a / upc_e / codabar / itf / pdf417 / aztec / datamatrix Android、鸿蒙(iOS 另支持 pdf417 / aztec) -

Canvas 端 CODE128 仅支持 ASCII 32–127。

隐私、权限声明

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

保存到相册:Android 9 及以下需要外部存储写入权限(android.permission.WRITE_EXTERNAL_STORAGE);iOS 需配置 NSPhotoLibraryAddUsageDescription 并获得相册添加授权。

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

插件不采集任何数据

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

无