Vue3二维码(QRCode)

发布时间:2026/8/29 13:10:21

Vue3二维码(QRCode)
可自定义设置以下属性扫描后的文本或地址value类型string默认 undefined二维码的渲染类型type类型svg | canvas | image默认 svg二维码中图片的地址icon类型string默认 undefined二维码大小size类型number单位 px默认 160二维码中图片的大小iconSize类型number单位 px默认 40二维码颜色Value must be in hex format (十六进制颜色值)color类型string默认 #000二维码背景色Value must be in hex format (十六进制颜色值)bgColor类型string默认 #FFF是否有边框bordered类型boolean默认 true边框颜色borderColor类型string默认 rgba(5, 5, 5, 0.06)缩放因子每个black dots 占用多少像素scale类型number默认 8二维码纠错等级errorLevel类型L | M | Q | H默认 H由于博客自身限制无法放置效果图请使用在线预览查看效果在线预览纠错等级也叫纠错率就是指二维码可以被遮挡后还能正常扫描而这个能被遮挡的最大面积就是纠错率。通常情况下二维码分为 4 个纠错级别L级 可纠正约 7% 错误、M级 可纠正约 15% 错误、Q级 可纠正约 25% 错误、H级 可纠正约30% 错误。并不是所有位置都可以缺损像最明显的三个角上的方框直接影响初始定位。中间零散的部分是内容编码可以容忍缺损。当二维码的内容编码携带信息比较少的时候也就是链接比较短的时候设置不同的纠错等级生成的图片不会发生变化。安装插件pnpm i qrcode①创建二维码组件QRCode.vuescript setup langts import { ref, computed, watch } from vue import type { CSSProperties } from vue import QRCode from qrcode export interface Props { value?: string // 扫描后的文本或地址 type?: svg | canvas | image // 二维码的渲染类型 icon?: string // 二维码中图片的地址 size?: number // 二维码大小单位 px iconSize?: number // 二维码中图片的大小单位 px color?: string // 二维码颜色Value must be in hex format (十六进制颜色值) bgColor?: string // 二维码背景色Value must be in hex format (十六进制颜色值) bordered?: boolean // 是否有边框 borderColor?: string // 边框颜色 scale?: number // 缩放因子每个 black dots 占用多少像素 /* 纠错等级也叫纠错率就是指二维码可以被遮挡后还能正常扫描而这个能被遮挡的最大面积就是纠错率。 通常情况下二维码分为 4 个纠错级别L级 可纠正约 7% 错误、M级 可纠正约 15% 错误、Q级 可纠正约 25% 错误、H级 可纠正约30% 错误。 并不是所有位置都可以缺损像最明显的三个角上的方框直接影响初始定位。中间零散的部分是内容编码可以容忍缺损。 当二维码的内容编码携带信息比较少的时候也就是链接比较短的时候设置不同的纠错等级生成的图片不会发生变化。 */ errorLevel?: L | M | Q | H // 二维码纠错等级 } const props withDefaults(definePropsProps(), { value: undefined, type: svg, icon: undefined, size: 160, iconSize: 40, color: #000, bgColor: #FFF, bordered: true, borderColor: rgba(5, 5, 5, 0.06), scale: 8, errorLevel: H }) const qrcodeSVGRef refHTMLElement | null(null) const qrcodeCanvasRef refHTMLElement | null(null) const qrcode refHTMLCanvasElement | string() const qrcodeStyle computed(() { const style: CSSProperties { width: ${props.size}px, height: ${props.size}px, backgroundColor: ${props.bgColor}, borderColor: ${props.borderColor} } return style }) const iconStyle computed(() { const style: CSSProperties { width: ${props.iconSize}px, height: ${props.iconSize}px, backgroundColor: ${props.bgColor} } return style }) const qrcodeOptions computed(() { return { quality: 1, // number 默认 0.92, 0 quality 1 仅在 type 为 image/jpeg 或 image/webp 时有效 margin: 0, // number 默认 4, 边距大小单位 px scale: props.scale, // number默认 4, 缩放因子A value of 1 means 1px per modules (black dots). color: { dark: props.color, // 像素点颜色 light: #00000000 // 背景色 }, errorCorrectionLevel: props.errorLevel } }) watch( () [props.value, props.type, qrcodeOptions.value], async () { if (props.value) { if (props.type svg) { qrcode.value await QRCode.toString(props.value, qrcodeOptions.value) qrcodeSVGRef.value!.innerHTML qrcode.value // !. 非空断言运算符 } else if (props.type canvas) { qrcode.value await QRCode.toCanvas(props.value, qrcodeOptions.value) qrcodeCanvasRef.value?.appendChild(qrcode.value) } else { qrcode.value await QRCode.toDataURL(props.value, qrcodeOptions.value) } } }, { immediate: true, deep: true, flush: post } ) defineExpose({ getQRCodeImage: () props.value QRCode.toDataURL(props.value, qrcodeOptions.value) }) /script template div classqrcode-wrap :class{ qrcode-bordered: bordered } :styleqrcodeStyle span v-iftype svg refqrcodeSVGRef classqrcode-svg/span span v-iftype canvas refqrcodeCanvasRef classqrcode-canvas/span img v-iftype image :srcqrcode as string classqrcode-image altQR Code / img v-ificon :srcicon :styleiconStyle classqrcode-icon altQR Code Icon / /div /template style langless scoped .qrcode-wrap { position: relative; display: inline-flex; justify-content: center; align-items: center; padding: 12px; border-radius: 8px; overflow: hidden; .qrcode-svg, .qrcode-canvas, .qrcode-image { width: 100%; height: 100%; } .qrcode-canvas { :deep(canvas) { max-width: 100%; max-height: 100%; } } .qrcode-icon { position: absolute; z-index: 1; right: 0; left: 0; top: 0; bottom: 0; margin: auto; pointer-events: none; } } .qrcode-bordered { border-width: 1px; border-style: solid; } /style②在要使用的页面引入其中引入使用了以下组件Vue3间距SpaceVue3按钮ButtonVue3分段控制器SegmentedVue3气泡卡片PopoverVue3颜色选择器ColorPickerVue3文本域Textareascript langts setup import QRCode from ./QRCode.vue import { ref } from vue import { MinusOutlined, PlusOutlined } from ant-design/icons-vue const qrcodeRef ref() const size ref(160) const value ref(hello world) const color ref(#FF6900) const bgColor ref(#00000030) const segmentedOptions [L, M, Q, H] const level ref(L) const decline () { size.value size.value - 10 if (size.value 48) { size.value 48 } } const increase () { size.value size.value 10 if (size.value 300) { size.value 300 } } const dowloadQRCode async () { const url await qrcodeRef.value.getQRCodeImage() const a document.createElement(a) a.download QRCode.png a.href url document.body.appendChild(a) a.click() document.body.removeChild(a) } /script template div h1{{ $route.name }} {{ $route.meta.title }}/h1 ul classm-list li a classu-file hrefhttps://www.npmjs.com/package/qrcode target_blankqrcode/a /li /ul h2 classmt30 mb10基本使用/h2 QRCode valuehttps://themusecatcher.blog.csdn.net / h2 classmt30 mb10无边框/h2 QRCode valuehttps://themusecatcher.blog.csdn.net :borderedfalse / h2 classmt30 mb10自定义尺寸/h2 Space vertical Space Button clickdecline :iconMinusOutlined small /Button Button clickincrease :iconPlusOutlined large /Button /Space QRCode :sizesize valuehttps://themusecatcher.blog.csdn.net / /Space h2 classmt30 mb10下载二维码/h2 Space vertical QRCode refqrcodeRef / Button typeprimary clickdowloadQRCodeDownlaod/Button /Space h2 classmt30 mb10气泡卡片二维码/h2 Popover :tooltip-style{ padding: 0 } template #content QRCode valuehttps://themusecatcher.blog.csdn.net :borderedfalse / /template img width100 height100 srchttps://themusecatcher.github.io/vue-amazing-ui/amazing-logo.svg / /Popover h2 classmt30 mb10带 Icon 的二维码/h2 QRCode error-levelH valuehttps://themusecatcher.blog.csdn.net iconhttps://themusecatcher.github.io/vue-amazing-ui/amazing-logo.svg / h2 classmt30 mb10自定义渲染类型/h2 h3 classmb10通过设置 type 自定义渲染结果可选 svg canvas image 三种类型/h3 Space QRCode valuehttps://themusecatcher.blog.csdn.net typesvg / QRCode valuehttps://themusecatcher.blog.csdn.net typecanvas / QRCode valuehttps://themusecatcher.blog.csdn.net typeimage / /Space h2 classmt30 mb10自定义样式/h2 h3 classmb10通过设置 color 和 bgColor 自定义二维码颜色和背景色/h3 Space QRCode valuehttps://themusecatcher.blog.csdn.net color#52c41a / QRCode valuehttps://themusecatcher.blog.csdn.net color#1677FF bg-color#f5f5f5 / QRCode valuehttps://themusecatcher.blog.csdn.net :colorcolor :bg-colorbgColor / Space vertical :width164 ColorPicker v-model:valuecolor :modes[hex] / ColorPicker v-model:valuebgColor :modes[hex] / /Space /Space h2 classmt30 mb10纠错等级/h2 h3 classmb10纠错等级也叫纠错率就是指二维码可以被遮挡后还能正常扫描而这个能被遮挡的最大面积就是纠错率。/h3 h3 classmb10 通常情况下二维码分为 4 个纠错级别L级 可纠正约 7% 错误、M级 可纠正约 15% 错误、Q级 可纠正约 25% 错误、H级 可纠正约 30% 错误。并不是所有位置都可以缺损像最明显的三个角上的方框直接影响初始定位。中间零散的部分是内容编码可以容忍缺损。当二维码的内容编码携带信息比较少的时候也就是链接比较短的时候设置不同的纠错等级生成的图片不会发生变化。 /h3 Space vertical QRCode valuehttps://themusecatcher.blog.csdn.net :error-levellevel / Segmented v-model:valuelevel :optionssegmentedOptions / /Space h2 classmt30 mb10自定义生成二维码/h2 Space aligncenter gaplarge QRCode :valuevalue / Textarea v-model:valuevalue :width200 allowClear / /Space /div /template

相关新闻

Vue3图片(Image)

Vue3图片(Image)

2026/8/29 13:10:21

本图片预览组件主要包括以下功能: 展示图片时,可设置鼠标悬浮时的预览文本;图像无法加载时要显示的描述;自定义图像高度和宽度;设置图像如何适应容器高度和宽度(fill | contain | cover | none | scale-dow…

Vue3空状态(Empty)

Vue3空状态(Empty)

2026/8/29 13:10:21

可自定义设置以下属性: 自定义描述内容(description),类型:string | slot | null,默认 暂无数据 设置描述文本的样式(descriptionStyle),类型:CSSPropertie…

初识 Free RTOS

初识 Free RTOS

2026/8/29 13:00:18

一、FreeRTOS简介Free RTOS(Real Time Operating System,实时操作系统),顾名思义,一款免费的实时操作系统。作为一种专门设计用于处理实时任务的操作系统。与通用计算机上运行的桌面操作系统(如Windows、Li…

AI Coding全景指南:从工具选择到工程化落地实践

AI Coding全景指南:从工具选择到工程化落地实践

2026/8/29 14:10:23

这两年“AI Coding”几乎是从工具圈一路火到了管理层。打开技术社区,满屏都是“AI 辅助编程”“AI Agent 写代码”的话题;打开招聘 JD,不少岗位也把“熟悉 AI 编程工具”写成了加分项。但真正在一线把 AI 用到生产项目里的团队,往…

从“光”到“色”:一文拆解TFT液晶屏如何用晶体管“画”出千万色彩

从“光”到“色”:一文拆解TFT液晶屏如何用晶体管“画”出千万色彩

2026/8/29 14:10:23

1. 从白光到彩色:TFT液晶屏的成像之旅 当你盯着手机屏幕刷短视频时,是否想过这千万种色彩是如何被"画"出来的?这背后是一场光与电的精密共舞。TFT液晶屏的成像过程就像个高效协作的工厂流水线: 背光模组 是发电站&…

基于51单片机的门禁系统设计:从矩阵键盘到EEPROM存储的综合实践

基于51单片机的门禁系统设计:从矩阵键盘到EEPROM存储的综合实践

2026/8/29 14:10:23

1. 项目背景与赛题核心解读 最近在整理一些老项目的资料,翻到了当年参加蓝桥杯第三届单片机国赛的题目——“门禁系统”。这个题目可以说是一个经典的综合应用案例,它不像一些单纯考某个外设驱动的题目,而是把单片机开发中常见的几个核心模块…

Ubuntu 安装docker docker-compose

Ubuntu 安装docker docker-compose

2026/8/29 14:10:23

Docker 通过提供轻量级、可移植且高效的解决方案,简化了软件开发和部署。“docker build”命令是 Docker 镜像创建过程的核心。本文将探讨 Docker 构建命令、用法以及 Docker 构建的优化。Docker 构建有什么作用?Docker build 是一个命令行界面 CLI命令&…

自主行动AI Agent实战:从零搭建自动操作网页的智能体

自主行动AI Agent实战:从零搭建自动操作网页的智能体

2026/8/29 14:10:23

这次我们来看一个 Agent 自主行动的真实案例:为了让用户抢到热门健身课的一个名额,一个 AI Agent 自己完成了一整套网页操作,最终拿到了结果。新闻标题用了 “Rogue AI agent hacks gym” 来形容它,其实多数时候这不是在攻击系统漏…

AI 编码新范式:SHA 绑定 spec 审批,从 issue 到 reviewed PR

AI 编码新范式:SHA 绑定 spec 审批,从 issue 到 reviewed PR

2026/8/29 14:00:23

AgentMachinist 这个项目在 Show HN 上展示的核心信息很短:issue to reviewed PR。从一个 issue 出发,最后得到一个经过审查的 pull request。很多 AI 编程工具现在都能做到“从 issue 生成 PR”,但 reviewed 这个限定词,让它的思…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/29 10:22:10

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/28 7:34:42

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

四款热门降AI工具测评:研究生和本科生怎么选?

四款热门降AI工具测评:研究生和本科生怎么选?

2026/8/29 0:09:39

马上要交论文了,最近真的被论文ai率折磨的够呛。 明明查重都没问题了,但是ai率就是居高不下,崩溃了,明明都是我自己写的,天杀的,明明都是我亲生的啊 改来改去,终于给我搞出一套完美的降ai方案…

论文降AI率免费攻略:自查、提示词与工具推荐

论文降AI率免费攻略:自查、提示词与工具推荐

2026/8/29 0:09:39

马上要交论文了,最近真的被论文ai率折磨的够呛。 明明查重都没问题了,但是ai率就是居高不下,崩溃了,明明都是我自己写的,天杀的,明明都是我亲生的啊 改来改去,终于给我搞出一套完美的降ai方案…

北京GEO优化服务商推荐:预算型企业如何选北京GEO优化服务商?

北京GEO优化服务商推荐:预算型企业如何选北京GEO优化服务商?

2026/8/29 0:09:39

前言:预算有限的企业更关心投入能否形成可持续的品牌资产。评估北京GEO优化服务商时,不能只比较单篇内容或单月报价,还要看是否能够把问题词、官网、信源和监测串成完整链路。本期重点放在预算配置、试点范围和交付边界,帮助企业先…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…