前端二维码技术全景:从原生JS到Vue/React/Uniapp/小程序的二维码生成

前端二维码技术全景:从原生JS到Vue/React/Uniapp/reactNative/小程序的生成实践

夸克资源分享:

表情包:https://pan.quark.cn/s/5b9ddeb237fe

工具箱:https://pan.quark.cn/s/aa2d6a730482,图吧、美蛋、路遥、入梦等

Fiddler Everywhere抓包:https://pan.quark.cn/s/6b1e2fbae019

Adobe:https://pan.quark.cn/s/13e39cfeaadb,先看安装教程

JetBranis开发者工具:https://pan.quark.cn/s/16e94dcff1f7,先看安装教程下的jetbra教程

逆向工具:https://pan.quark.cn/s/50e93c8ca54c

前端项目搭建集锦:https://blog.csdn.net/randy521520/article/details/146998467

一、简介

二维码(Quick Response Code)作为一种矩阵式二维条码,是信息时代高效信息传递的核心载体。它通过黑白像素在平面上的特定排列,存储文本、网址、联系人、支付信息等多种数据,凭借高密度编码、快速识别的特性,已深度融入生产生活的各个场景。​

从技术原理来看,二维码采用 Reed-Solomon 纠错算法,具备极强的容错能力 ------ 即使表面污损、残缺达 30%,仍可准确识别,这一优势使其在复杂环境中广泛适用。相较于传统一维条码,它的信息存储量提升数十倍,单码可容纳数千个字符,且支持中文、图片等多元数据格式,打破了单一信息传递的局限。​

在应用场景上,二维码实现了 "万物互联" 的落地。商业领域,它是营销利器:扫码领券、会员注册、产品溯源等功能,让品牌与消费者实现即时互动;支付场景中,微信、支付宝等平台的二维码支付,重构了交易模式,推动无现金社会加速到来;政务服务里,电子身份证、健康码、核酸检测报告等二维码应用,简化了办事流程,提升了公共服务效率;此外,在物流仓储、图书管理、工业生产等领域,二维码也承担着数据采集、追踪管理的关键角色,成为数字化转型的重要支撑。​

如今,随着 5G、物联网技术的发展,二维码正朝着彩色化、动态化、防伪化方向升级。它不仅是信息传递的工具,更成为连接物理世界与数字生态的重要入口,持续为各行各业的智能化、高效化发展赋能,重塑着人们的生活与工作方式。

技术栈 首选库 核心优势 支持特性 参考文档
原生 JS QRCodeStyling 零依赖、自定义强、LOGO + 彩色原生支持,支持:vue、react、next、node、angular 彩色、LOGO、渐变、导出 官网:https://qr-code-styling.com/ git:https://gitcode.com/gh_mirrors/qr/qr-code-styling
Vue vue-qr/vue3-qr Vue 语法适配、开箱即用 简洁版,支持 LOGO 官网:https://fengyuanchen.github.io/vue-qrcode/ git:https://gitcode.com/gh_mirrors/vu/vue-qrcode
Uniapp uQRCode 全端兼容、Uniapp 专用,支持:原生js、vue、react、next、node、angular、微信小程序 彩色、LOGO、多端适配 官网:https://uqrcode.cn/doc git:https://github.com/Sansnn/uQRCode
React react-qr-code 自定义性强、React 适配 简洁版,支持 LOGO git:https://gitcode.com/gh_mirrors/re/react-qr-code/
微信小程序 weapp-qrcode-canvas-2d 小程序原生 API、体积小 简洁版,支持 LOGO git:https://gitcode.com/gh_mirrors/we/weapp-qrcode-canvas-2d

二、原生js二维码生成

1.标准二维码,

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QR Code Styling</title>
    <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
</head>
<body>
<div id="canvas" style="text-align: center;"></div>
<script type="text/javascript">

    const qrCode = new QRCodeStyling({
        width: 300,
        height: 300,
        data: "https://www.baidu.com/",
    });

    qrCode.append(document.getElementById("canvas"));
</script>
</body>
</html>

2.logo二维码

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QR Code Styling</title>
    <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
</head>
<body>
<div id="canvas" style="text-align: center;"></div>
<script type="text/javascript">

    const qrCode = new QRCodeStyling({
        width: 300,
        height: 300,
        data: "https://www.baidu.com/",
        image: "./头像.jpg"
    });

    qrCode.append(document.getElementById("canvas"));
</script>
</body>
</html>

3.彩色二维码

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QR Code Styling</title>
    <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
</head>
<body>
<div id="canvas" style="text-align: center;"></div>
<script type="text/javascript">

    const qrCode = new QRCodeStyling({
        width: 300,
        height: 300,
        type: "png",
        data: "https://www.baidu.com/",
        image: "./头像.jpg",
        dotsOptions: {
            color: "#4267b2",
        }
    });

    qrCode.append(document.getElementById("canvas"));
</script>
</body>
</html>

4.二维码下载

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QR Code Styling</title>
    <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script>
</head>
<body>
<div id="canvas" style="text-align: center;"></div>
<button id="download">下载</button>
<script type="text/javascript">

    const qrCode = new QRCodeStyling({
        width: 300,
        height: 300,
        type: "png",
        data: "https://www.baidu.com/",
        image: "./头像.jpg",
        dotsOptions: {
            color: "#4267b2",
        }
    });

    qrCode.append(document.getElementById("canvas"));

    document.getElementById("download").addEventListener("click", () => {
        qrCode.download({ name: "qr", extension: "png" });
    });
</script>
</body>
</html>

三、vue二维码生成

1.运行yarn add vue@3 qrcode@1 @chenfengyuan/vue-qrcode@2

2.标准二维码

javascript 复制代码
<template>
    <div>
        <VueQrcode :value="https://www.baidu.com/"></VueQrcode>
    </div>
</template>
<script setup>
import VueQrcode from '@chenfengyuan/vue-qrcode';
</script>
<style lang="scss" scoped>
    div {
        text-align: center;
        margin-top: 50px;
    }
</style>

3.logo二维码

javascript 复制代码
<template>
    <div>
        <VueQrcode value="https://www.baidu.com/"></VueQrcode>
        <img :src="logo">
    </div>
</template>
<script setup>
import VueQrcode from '@chenfengyuan/vue-qrcode';
import logo from '@img/头像.jpg';

</script>
<style lang="scss" scoped>
    div {
        text-align: center;
        margin-top: 50px;
        position: relative;
        img{
            position: absolute;
            width: 5px;
            height: 5px;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
        }
    }
</style>

4.配置项

四、react二维码生成

1.运行yarn add react-qr-code安装react-qr-code

2.标准二维码

javascript 复制代码
import QRCode from 'react-qr-code';

const Test = ()=>{
    return <div style={{ textAlign:'center' }}>
        <QRCode value="https://www.baidu.com" />
    </div>;
};

export default Test;

3.logo二维码

javascript 复制代码
import QRCode from 'react-qr-code';
import logo from '@img/头像.jpg';

const Test = ()=>{
    return <div style={{
        textAlign:'center',
        marginTop:'50px',
        position: 'relative'
    }}>
        <QRCode value="https://www.baidu.com" />
        <img src={logo} alt="logo" style={{
            width:'50px',
            height:'50px',
            position:'absolute',
            left: '50%',
            top:'50%',
            transform: 'translate(-50%,-50%)'
        }}></img>
    </div>;
};

export default Test;

4.配置项

五、微信小程序二维码生成

1.运行npm install weapp-qrcode-canvas-2d安装weapp-qrcode-canvas-2d,安装成功后点击工具构建npm,小程序支持npm需要一些配置可参考文档:https://blog.csdn.net/randy521520/article/details/154659752

2.标准二维码

javascript 复制代码
<!--pages/tab1/tab1.wxml-->
<view>
  <canvas type="2d" style="width:200px; height:200px;" id="myQrcode" canvas-id='myQrcode' ></canvas>
</view>
// pages/tab1/tab1.js
import drawQrcode from 'weapp-qrcode-canvas-2d'
javascript 复制代码
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const query = wx.createSelectorQuery()
    query.select('#myQrcode')
        .fields({
            node: true,
            size: true
        })
        .exec(async (res) => {
            const canvas = res[0].node
            await drawQrcode({
                canvas: canvas,
                canvasId: 'myQrcode',
                text: 'https://www.baidu.com',
            })
     
            wx.canvasToTempFilePath({
                canvasId: 'myQrcode',
                canvas: canvas,
                success(res) {
                    console.log('二维码临时路径:', res.tempFilePath)
                },
                fail(res) {
                    console.error(res)
                }
            })
        })
  }
})

3.logo二维码

javascript 复制代码
// pages/tab1/tab1.js
import drawQrcode from 'weapp-qrcode-canvas-2d'

Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const query = wx.createSelectorQuery()
    query.select('#myQrcode')
        .fields({
            node: true,
            size: true
        })
        .exec(async (res) => {
            const canvas = res[0].node
            const img = canvas.createImage();
            img.src = "/assets/img/头像.jpg"
            img.onload = async ()=>{
              await drawQrcode({
                  canvas: canvas,
                  canvasId: 'myQrcode',
                  text: 'https://www.baidu.com',
                  image: {
                    imageResource: img,
                    width: 80, // 建议不要设置过大,以免影响扫码
                    height: 80, // 建议不要设置过大,以免影响扫码
                    round: true // Logo图片是否为圆形
                }
              })
      
              wx.canvasToTempFilePath({
                  canvasId: 'myQrcode',
                  canvas: canvas,
                  success(res) {
                      console.log('二维码临时路径:', res.tempFilePath)
                  },
                  fail(res) {
                      console.error(res)
                  }
              })
            }
        })
  }
})

4.drawQrcode参数

参数 必须 说明 示例
canvas 必须 画布标识, 传入 canvas 组件实例
canvasId 绘制的canvasId 'myQrcode'
text 必须 二维码内容 'abc123'
width 二维码宽度 , 与canvas的width保持一致 260
padding 空白内边距 20
paddingColor 内边距颜色 默认与background一致
background 二维码背景颜色, 默认值白色 '#ffffff'
foreground 二维码前景色, 默认值黑色 '#000000'
typeNumber 二维码的计算模式, 默认值:-1 8
correctLevel 二维码纠错级别, 默认值为高级, 取值: { L: 1, M: 0, Q: 3, H: 2 } 1
image 在 canvas 上绘制图片, 层级高于二维码, v1.1.1+版本支持。具体使用见: 例子2 {imageResource: "", width:80, height: 80, round: true}

六、uQRCode二维码生成(全端兼容、Uniapp 专用)

1.运行yarn add uqrcodejs安装uqrcode

2.标准二维码

javascript 复制代码
<template>
    <canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app';
import UQRCode from 'uqrcodejs';

onShow(() => {
    let qr = new UQRCode();
    qr.data = 'https://www.baidu.com';
    qr.size = 200;
    qr.make();
    qr.canvasContext = uni.createCanvasContext('qrcode',this);
    qr.drawCanvas();
});
</script>

3.logo二维码

javascript 复制代码
<template>
    <canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app';
import UQRCode from 'uqrcodejs';
import logo from './头像.jpg';

onShow(() => {
    let qr = new UQRCode();
    qr.setOptions({
        data: 'https://www.baidu.com', // 二维码跳转地址

        // Logo核心配置
        foregroundImageSrc: logo, // Logo图片地址
        foregroundImageWidth: 60, // Logo宽度(建议为二维码尺寸的1/5)
        foregroundImageHeight: 60, // Logo高度
        foregroundImagePadding: 8, // Logo内边距
        foregroundImageBackgroundColor: '#FFFFFF', // Logo背景色(白色边框)
        foregroundImageBorderRadius: 8, // Logo圆角(优化美观度)
        foregroundImageShadowBlur: 5, // Logo阴影模糊度
        foregroundImageShadowColor: 'rgba(0,0,0,0.1)' // Logo阴影颜色
    });

    qr.make();
    qr.canvasContext = uni.createCanvasContext('qrcode',this);
    qr.drawCanvas();
});
</script>

4.彩色二维码

javascript 复制代码
<template>
    <canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app';
import UQRCode from 'uqrcodejs';

onShow(() => {
    let qr = new UQRCode();
    qr.setOptions({
        data: 'https://www.baidu.com', // 二维码跳转地址

        size: 280,
        margin: 12,
        useDynamicSize: true, // 启用动态尺寸(消除白色细线)

        // 基础颜色配置
        areaColor: '#F5F8FF', // 二维码绘制区域背景色(浅蓝)
        foregroundColor: '#E63946', // 前景码点颜色(红色)
        backgroundColor: 'rgba(255,255,255,0.8)', // 整体背景色(半透明白)

        // 定位角颜色(自定义差异化颜色)
        positionProbeForegroundColor: '#457B9D', // 定位角前景色(中蓝)

        // 时序图案颜色
        timingForegroundColor: '#A8DADC', // 时序线颜色(浅蓝)

        // 暗块颜色(与前景色区分)
        darkBlockColor: '#E63946'
    });

    qr.make();
    qr.canvasContext = uni.createCanvasContext('qrcode',this);
    qr.drawCanvas();
});
</script>

5.背景图二维码

javascript 复制代码
<template>
    <canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app';
import UQRCode from 'uqrcodejs';
import logo from './头像.jpg';

onShow(() => {
    let qr = new UQRCode();
    qr.setOptions({
        data: 'https://example.com/activity', // 活动地址
        margin: 0, // 无边距(让背景图全屏)
        foregroundColor: '#333333', // 前景色(深色,保证可读性)
        foregroundPadding: 0.1, // 码点内边距(减少遮挡背景)
        useDynamicSize: true, // 启用动态尺寸(消除白色细线)

        // 背景图配置
        backgroundImageSrc: logo, // 背景图地址
        backgroundImageAlpha: 0.3, // 背景图透明度(0.3不影响扫码)
        backgroundImageBorderRadius: 16 // 背景图圆角(优化外观)
    });

    qr.make();
    qr.canvasContext = uni.createCanvasContext('qrcode',this);
    qr.drawCanvas();
});
</script>

6.自定义插件,点击切换颜色,官方也提供了许多免费插件:https://uqrcode.cn/doc/plugin/style.html

javascript 复制代码
<template>
    <canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"
            @click="handleClick"></canvas>
</template>

<script setup>
import { onShow } from '@dcloudio/uni-app';
import UQRCode from 'uqrcodejs';

function drawRoundRect(ctx, x, y, width, height, radius) {
    ctx.beginPath();
    // 左上角
    ctx.arcTo(x + width, y, x + width, y + height, radius);
    // 右上角
    ctx.arcTo(x + width, y + height, x, y + height, radius);
    // 右下角
    ctx.arcTo(x, y + height, x, y, radius);
    // 左下角
    ctx.arcTo(x, y, x + width, y, radius);
    ctx.closePath();
}


function ColorSwitchPlugin(UQRCode, options) {
    options.isRed = false;
    options.drawColorSwitchCanvas = function() {
        const { isMaked, canvasContext: ctx, dynamicSize: size, isRed } = this;
        if (!isMaked) {
            return Promise.reject(new UQRCode.Error('请先调用make方法'));
        }

        const drawModules = this.getDrawModules();
        return new Promise((resolve) => {
            drawModules.forEach((module) => {
                if (module.type === 'tile' && module.name === 'foreground') {
                    const { x, y, width, height } = module;
                    // 替换为自定义的drawRoundRect
                    drawRoundRect(ctx, x, y, width, height, 4);
                    ctx.fillStyle = isRed ? '#E63946' : '#2D5BFF';
                    ctx.fill();
                }
            });
            // 修复3:uni-app Canvas需要调用draw()完成绘制
            ctx.draw(false, () => {
                resolve(true);
            });
        });
    };
}
// 插件必需配置(供框架识别)
ColorSwitchPlugin.Type = 'style';
ColorSwitchPlugin.Name = 'colorSwitch';
ColorSwitchPlugin.DrawCanvas = 'drawColorSwitchCanvas';

// 2. 配置图片加载方法
UQRCode.prototype.loadImage = function(src) {
    return new Promise((resolve, reject) => {
        const img = new Image();
        img.src = src;
        img.crossOrigin = 'anonymous';
        img.onload = () => resolve(img);
        img.onerror = (err) => reject(err);
    });
};

let qr = new UQRCode();
onShow(() => {
    qr.register(ColorSwitchPlugin); // 注册自定义插件
    qr.setOptions({
        data: 'https://example.com/activity', // 活动地址
        size: 250,
        margin: 10,
        useDynamicSize: true
    });

    qr.make();
    qr.canvasContext = uni.createCanvasContext('qrcode',this);
    qr.drawCanvas();
});
const handleClick = () => {
    qr.isRed = !qr.isRed; // 切换状态
    qr.drawColorSwitchCanvas(); // 重新绘制
};
</script>

7.vue使用uQRCode

javascript 复制代码
<template>
    <div>
        <canvas id="canvas" height="200" width="200"></canvas>
    </div>
</template>
<script setup>
import UQRCode from 'uqrcodejs';
import { onMounted } from 'vue';

onMounted(() => {
    let canvas = document.getElementById('canvas');
    let qr = new UQRCode();
    qr.data = 'https://www.baidu.com';
    qr.useDynamicSize = true;
    qr.make();
    qr.canvasContext = canvas.getContext('2d');
    qr.drawCanvas();
});
</script>
<style lang="scss" scoped>
div {
    text-align: center;
    margin-top: 50px;
}
</style>

8.react使用uQRCode

javascript 复制代码
import UQRCode from 'uqrcodejs';
import { useEffect } from 'react';

const Test = ()=>{

    useEffect(() => {
        let canvas = document.getElementById('qrcode');
        let qr = new UQRCode();
        qr.data = 'https://www.baidu.com';
        qr.useDynamicSize = true;
        qr.make();
        qr.canvasContext = canvas.getContext('2d');
        qr.drawCanvas();
    }, []);

    return (<div style={{ textAlign:'center' }}>
        <canvas id="qrcode" width="200" height="200" />
    </div>);
};

export default Test;

9.微信小程序使用uQRCode

javascript 复制代码
// pages/test/test.js
import UQRCode from 'uqrcodejs';

Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const query = wx.createSelectorQuery()
    query.select('#myQrcode')
        .fields({
            node: true,
            size: true
        })
        .exec(async (res) => {
            const canvas = res[0].node
            canvas.width = 200;
            canvas.height = 200;
            
            let qr = new UQRCode();
            qr.data = 'https://www.baidu.com';
            qr.useDynamicSize = true;
            qr.make();
            qr.canvasContext = canvas.getContext('2d');
            qr.drawCanvas();
        })
  }
})

七、uQRCode 基本配置

配置项 类型 默认值 必填 只读 说明
data string ""(空字符串) 指定二维码对应的内容(如链接、文本等),为核心必填项
size number 200 指定要生成的二维码整体大小(单位:像素),需与画布尺寸匹配以避免留白/溢出
useDynamicSize boolean false 是否启用动态尺寸;启用后可消除码点小数点导致的留白状态,但需通过dynamicSize重设画布尺寸
dynamicSize number undefined 动态尺寸计算结果,仅当useDynamicSize=true时自动生成,用于同步画布尺寸
typeNumber number -1 二维码版本:-1为自动计算(内容越多版本越高),可手动指定1-40的版本号
errorCorrectLevel number UQRCode.errorCorrectLevel.H 纠错等级:可选L(1级)、M(0级)、Q(3级)、H(2级),H级容错率最高
margin number 0 二维码整体边距(单位:像素),设置后二维码与画布边缘会产生空白间距
areaColor string #FFFFFF 二维码绘制区域的底色(即码点之外的背景色)
backgroundColor string rgba(255,255,255,0)(透明白色) 二维码整体背景色,支持rgba、十六进制等颜色格式
backgroundImageSrc string undefined 二维码背景图片的地址(如本地路径、网络链接),需配合loadImage方法加载
backgroundImageWidth number 等于size的值 背景图片的宽度,默认与二维码尺寸一致
backgroundImageHeight number 等于size的值 背景图片的高度,默认与二维码尺寸一致
backgroundImageX number 0 背景图片在画布中的X轴坐标(控制水平位置),默认靠左对齐
backgroundImageY number 0 背景图片在画布中的Y轴坐标(控制垂直位置),默认靠上对齐
backgroundImageAlpha number 1 背景图片的透明度,取值范围0-1(0为完全透明,1为不透明)
backgroundImageBorderRadius number 0 背景图片的圆角值(单位:像素),值越大圆角越明显
backgroundPadding number 0.0 背景图片的内边距,取值范围0.0-1.0(按二维码尺寸比例计算)
foregroundColor string #000000 二维码码点的颜色(即前景色),决定二维码的主体颜色
foregroundImageSrc string undefined 二维码中心前景图片的地址(如Logo),需配合loadImage方法加载
foregroundImageWidth number 等于size/4(二维码尺寸的1/4) 前景图片的宽度,默认居中显示
foregroundImageHeight number 等于size/4(二维码尺寸的1/4) 前景图片的高度,默认居中显示
foregroundImageX number size/2 - foregroundImageWidth/2 前景图片的X轴坐标,默认计算为水平居中
foregroundImageY number size/2 - foregroundImageHeight/2 前景图片的Y轴坐标,默认计算为垂直居中
foregroundImagePadding number 0 前景图片的边距(单位:像素),用于与码点产生间距
foregroundImageBackgroundColor string #FFFFFF 前景图片的背景色,用于覆盖码点区域,使图片更清晰
foregroundImageBorderRadius number 0 前景图片的圆角值(单位:像素)
foregroundImageShadowOffsetX number 0 前景图片阴影的水平偏移值(单位:像素)
foregroundImageShadowOffsetY number 0 前景图片阴影的垂直偏移值(单位:像素)
foregroundImageShadowBlur number 0 前景图片阴影的模糊度(单位:像素),值越大阴影越柔和
foregroundImageShadowColor string #808080 前景图片阴影的颜色
foregroundPadding number 0.0 前景码点的内边距,取值范围0.0-1.0(按二维码尺寸比例计算)
positionProbeBackgroundColor string 与backgroundColor一致 二维码定位角(三个角的方块)的背景色,默认继承整体背景色
positionProbeForegroundColor string 与foregroundColor一致 二维码定位角的前景色,默认继承码点颜色
separatorColor string 与foregroundColor一致 二维码定位角与其他区域的分割线颜色,默认继承码点颜色
positionAdjustBackgroundColor string 与backgroundColor一致 二维码对齐图案(中间小方块)的背景色,默认继承整体背景色
positionAdjustForegroundColor string 与foregroundColor一致 二维码对齐图案的前景色,默认继承码点颜色
timingBackgroundColor string 与backgroundColor一致 二维码时序图案(黑白交替线)的背景色,默认继承整体背景色
timingForegroundColor string 与foregroundColor一致 二维码时序图案的前景色,默认继承码点颜色
typeNumberBackgroundColor string 与backgroundColor一致 二维码版本图案的背景色,默认继承整体背景色
typeNumberForegroundColor string 与foregroundColor一致 二维码版本图案的前景色,默认继承码点颜色
darkBlockColor string 与foregroundColor一致 二维码暗块(黑色码点)的颜色,默认继承码点颜色
base object undefined 二维码基础对象,调用make()方法后自动生成,包含底层QRCode实例数据
modules array [](空数组) 二维码核心模块数据(码点矩阵),调用make()后自动填充
moduleCount number 0 二维码模块(码点)的数量,调用make()后根据版本自动计算
canvasContext object undefined Canvas画布上下文,调用drawCanvas()方法前必须指定
drawReserve boolean false 画布绘制是否保留历史内容:仅对旧版Canvas有效,2D Canvas不支持此属性
isMade boolean false 标记是否已调用make()方法:true表示已生成二维码数据,false表示未生成

八、uQRCode 实例方法

方法名 返回值 参数说明 核心功能 关键注意事项
loadImage Promise src(string):图片路径(本地路径/网络链接) 为二维码的背景图、前景图设置图片加载逻辑,确保图片资源能被正确获取并绘制 1. 各平台实现方式不同(HTML/Uni-app/微信小程序需适配不同API); 2. 微信小程序需配置网络图片download域名白名单; 3. 必须返回Promise对象,resolve传递图片资源,reject传递错误信息
setOptions void option(object):包含基本配置的对象(如data/size/margin等) 批量设置二维码的基本配置,替代逐个赋值属性的方式,简化代码 配置对象需包含合法的基本配置项(参考"基本配置文档"),设置后需调用make()生效
make void 生成二维码核心数据(如modules码点矩阵、moduleCount模块数量) 1. 必须在设置data(二维码内容)后调用; 2. 调用后isMade属性会变为true,标记数据已生成
getDrawModules Array 获取二维码各绘制模块的详细信息,包含层级、位置、尺寸、颜色等数据 1. 必须在make()调用后使用(否则无数据); 2. 模块层级顺序:绘制区域→背景图→背景/前景→前景图; 3. 返回数组中每个元素包含name(模块名)、type(模块类型)、x/y(坐标)等字段
drawCanvas Promise 将生成的二维码数据绘制到指定的Canvas画布上 1. 绘制前必须设置canvasContext(Canvas上下文); 2. 支持通过then()捕获绘制成功,catch()捕获失败; 3. 2D Canvas不支持drawReserve(保留历史绘制)特性
register void plugin(Function):扩展插件的回调函数 为当前UQRCode实例注册扩展插件,实现自定义功能(如自定义码点样式、2.5D效果) 1. 插件需符合指定格式(需包含扩展属性、自定义绘制方法等); 2. 注册后需设置插件相关属性,并调用插件对应的绘制方法(如draw25DCanvas); 3. 全局注册可使用UQRCode.use()方法

九、uQRCode 静态属性

静态属性名 类型 说明
errorCorrectLevel object 定义二维码的纠错等级常量,包含: - L: 1级纠错(容错率约7%) - M: 0级纠错(容错率约15%) - Q: 3级纠错(容错率约25%) - H: 2级纠错(容错率约30%)
moduleType object 定义二维码模块类型的常量,包含: - BACKGROUND: 背景模块 - FOREGROUND: 前景模块 - POSITION_PROBE: 定位角模块 - POSITION_ADJUST: 对齐图案模块 - TIMING: 时序图模块 - TYPE_NUMBER: 版本图案模块 - DARK_BLOCK: 暗块模块
drawLevel object 定义二维码绘制层级的常量(决定模块绘制顺序),包含: - BACKGROUND: 背景层(最先绘制) - FOREGROUND: 前景层 - POSITION_PROBE: 定位角层 - POSITION_ADJUST: 对齐图案层 - TIMING: 时序图案层 - TYPE_NUMBER: 版本图案层 - DARK_BLOCK: 暗块层 - FOREGROUND_IMAGE: 前景图片层(最后绘制)
pluginName object 定义内置插件名称的常量,包含: - QRCODE_25D: 2.5D二维码插件(提供立体效果) - QRCODE_LOGO: Logo插件(增强前景图功能)
version string 当前 uQRCode 库的版本号(如4.0.6),用于识别库版本信息
use Function 全局注册插件的方法,参数为插件回调函数,作用于所有 UQRCode 实例(区别于register实例注册)
相关推荐
m0_471199636 小时前
【场景】笛卡尔积
开发语言·前端·javascript
顾安r7 小时前
12.15 脚本网页 bash内建命令
java·前端·javascript·html·bash
Watermelo6177 小时前
【前端实战】从 try-catch 回调到链式调用:一种更优雅的 async/await 错误处理方案
前端·javascript·网络·vue.js·算法·vue·用户体验
木易 士心7 小时前
NestJS 核心揭秘:InstanceWrapper 的艺术与前端缓存新思路
前端·缓存
IT_陈寒7 小时前
SpringBoot 3.x性能优化实战:这5个配置让你的应用启动速度提升50%
前端·人工智能·后端
奶昔不会射手7 小时前
css之如何获取祖先元素的宽高
前端·css
serve the people7 小时前
滑块验证完整实现教程(前端 + 后端 + Nginx 集成)
运维·前端·nginx
yivifu7 小时前
Excel中Lookup函数实现临界点归入下一个等级的方法
java·前端·excel
Wiktok7 小时前
Tailwind CSS 自适应相关
前端·css·tailwindcss