更新记录

1.0.0(2025-12-29) 下载此版本

  • 初始版本发布
  • 纯 JavaScript 实现二维码生成算法
  • 支持 Vue2 和 Vue3
  • 支持自定义前景色、背景色
  • 支持添加 Logo 图片
  • 支持多种纠错级别(L/M/Q/H)
  • 支持保存到相册
  • 支持导出临时文件和 Base64
  • 兼容全平台:H5、App、各类小程序

平台兼容性

uni-app(3.6.15)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- -

w-qrcode 二维码生成器

高性能二维码生成组件,纯 JavaScript 实现,无外部依赖。

特性

  • 纯 JavaScript 实现,无需任何外部依赖
  • 支持 Vue2 和 Vue3
  • 支持全平台:H5、App(Vue/Nvue)、微信/支付宝/百度/字节跳动/QQ 等小程序
  • 支持自定义前景色、背景色
  • 支持添加 Logo 图片
  • 支持多种纠错级别(L/M/Q/H)
  • 支持保存到相册
  • 支持导出为图片

安装

w-qrcode 目录复制到项目的 uni_modules 目录下即可。

基本使用

<template>
  <w-qrcode value="https://example.com" />
</template>

完整示例

<template>
  <view class="container">
    <!-- 基础用法 -->
    <w-qrcode
      value="https://example.com"
      :size="200"
    />

    <!-- 自定义颜色 -->
    <w-qrcode
      value="https://example.com"
      :size="200"
      foreground="#1989fa"
      background="#f5f5f5"
    />

    <!-- 带 Logo -->
    <w-qrcode
      ref="qrcodeRef"
      value="https://example.com"
      :size="200"
      logo="/static/logo.png"
      :logo-size="50"
      :logo-radius="8"
      error-correction-level="H"
      @generated="onGenerated"
      @longpress="onLongpress"
    />

    <button @click="saveToAlbum">保存到相册</button>
  </view>
</template>

<script>
export default {
  methods: {
    onGenerated(info) {
      console.log('二维码生成成功:', info);
      // { version: 2, size: 25, errorCorrectionLevel: 'H' }
    },
    onLongpress(e) {
      console.log('长按事件');
    },
    saveToAlbum() {
      this.$refs.qrcodeRef.saveToAlbum()
        .then(res => {
          console.log('保存成功', res);
        })
        .catch(err => {
          console.error('保存失败', err);
        });
    }
  }
};
</script>

Vue3 组合式 API 示例

<template>
  <w-qrcode
    ref="qrcodeRef"
    :value="qrValue"
    :size="200"
  />
</template>

<script setup>
import { ref } from 'vue';

const qrcodeRef = ref(null);
const qrValue = ref('https://example.com');

const saveToAlbum = () => {
  qrcodeRef.value.saveToAlbum();
};
</script>

Props 属性

属性名 类型 默认值 说明
value String '' 要编码的文本内容
size Number/String 200 二维码尺寸(单位:px)
foreground String '#000000' 前景色(二维码颜色)
background String '#FFFFFF' 背景色
errorCorrectionLevel String 'M' 纠错级别,可选值:L/M/Q/H
margin Number/String 2 二维码边距(单位:模块)
logo String '' Logo 图片路径
logoSize Number/String 50 Logo 尺寸(单位:px)
logoMargin Number/String 5 Logo 外边距(单位:px)
logoRadius Number/String 8 Logo 圆角(单位:px)
logoBackground String '#FFFFFF' Logo 背景色
canvas2d Boolean true 是否使用 Canvas 2D(仅小程序有效)

纠错级别说明

级别 纠错能力 说明
L 约 7% 数据恢复能力最低
M 约 15% 默认级别,平衡
Q 约 25% 较高的数据恢复能力
H 约 30% 最高级别,适合添加 Logo

注意:如果需要在二维码中添加 Logo,建议使用 H 级别,以保证扫描成功率。

Events 事件

事件名 说明 回调参数
generated 二维码生成成功时触发 { version, size, errorCorrectionLevel }
error 生成失败时触发 Error 对象
longpress 长按二维码时触发 Event 对象

Methods 方法

通过 ref 获取组件实例后调用:

方法名 说明 参数 返回值
saveToAlbum 保存到相册 - Promise
toTempFilePath 获取临时文件路径 options Promise<{tempFilePath}>
toDataURL 获取 Base64(仅 H5) type, quality Promise
generate 重新生成二维码 - -

toTempFilePath 参数

this.$refs.qrcodeRef.toTempFilePath({
  fileType: 'png', // 'jpg' | 'png'
  quality: 1,      // 0-1,jpg 时有效
  destWidth: 300,  // 输出图片宽度
  destHeight: 300  // 输出图片高度
});

直接使用 JS SDK

如果只需要生成二维码数据,可以直接使用 JS SDK:

import QRCode from '@/uni_modules/w-qrcode/js_sdk/qrcode.js';

// 生成二维码数据
const result = QRCode.generate('https://example.com', {
  errorCorrectionLevel: 'M' // L/M/Q/H
});

console.log(result);
// {
//   version: 2,          // 版本号 1-40
//   size: 25,            // 矩阵尺寸
//   modules: [[...], ...], // 二维码矩阵,1表示黑色,0表示白色
//   errorCorrectionLevel: 'M'
// }

平台差异

平台 渲染方式 说明
H5 Canvas 完全支持
App-Vue Canvas 完全支持
App-Nvue View 布局 使用 Fallback 渲染
微信小程序 Canvas 2D 推荐使用 Canvas 2D
其他小程序 Canvas 使用旧版 Canvas API

常见问题

1. 二维码扫描不出来?

  • 检查内容是否正确
  • 增加纠错级别(使用 'H')
  • 减小 Logo 尺寸(不超过二维码的 30%)
  • 增加二维码尺寸

2. 保存到相册失败?

  • 小程序需要用户授权
  • App 需要配置相册权限
  • 检查图片路径是否正确

3. Logo 不显示?

  • 确保图片路径正确
  • 本地图片使用绝对路径
  • 网络图片需要在小程序后台配置域名白名单

更新日志

1.0.0

  • 初始版本发布
  • 支持基础二维码生成
  • 支持自定义样式
  • 支持 Logo 图片
  • 支持多平台

隐私、权限声明

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

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

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

许可协议

MIT协议