Vue3二维码(QRCode)

71 篇文章 4 订阅
69 篇文章 3 订阅

可自定义设置以下属性:

  • 扫描后的文本或地址(value),类型:string,默认 ''

  • 二维码大小(size),类型:number,单位px,默认 160

  • 二维码颜色,Value must be in hex format (十六进制颜色值)(color),类型:string,默认 '#000'

  • 二维码背景色,Value must be in hex format (十六进制颜色值)(bgColor),类型:string,默认'#FFF'

  • 是否有边框(bordered),类型:boolean,默认 true

  • 边框颜色(borderColor),类型:string,默认 '#0505050f'

  • 每个black dots多少像素(scale),类型:number,默认 8

  • 二维码纠错等级(errorLevel),类型:'L'|'M'|'Q'|'H',默认 'H'

纠错等级也叫纠错率,就是指二维码可以被遮挡后还能正常扫描,而这个能被遮挡的最大面积就是纠错率。

通常情况下二维码分为 4 个纠错级别:L级 可纠正约 7% 错误、M级 可纠正约 15% 错误、Q级 可纠正约 25% 错误、H级 可纠正约30% 错误。

并不是所有位置都可以缺损,像最明显的三个角上的方框,直接影响初始定位。中间零散的部分是内容编码,可以容忍缺损。

当二维码的内容编码携带信息比较少的时候,也就是链接比较短的时候,设置不同的纠错等级,生成的图片不会发生变化。

在线预览

安装插件:pnpm i qrcode @vueuse/integrations

①创建二维码组件QRCode.vue:

<script setup lang="ts">
import { computed } from 'vue'
import { useQRCode } from '@vueuse/integrations/useQRCode'
/*
  参考文档:https://vueuse.org/integrations/useQRCode/
  https://www.npmjs.com/package/qrcode#qr-code-options
*/
interface Props {
  value?: string // 扫描后的文本或地址
  size?: 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(defineProps<Props>(), {
  value: '',
  size: 160,
  color: '#000',
  bgColor: '#FFF',
  bordered: true,
  borderColor: '#0505050f',
  scale: 8,
  errorLevel: 'H' // 可选 L M Q H
})
const qrcode = computed(() => {
  // `qrcode` will be a ref of data URL
  return useQRCode(props.value, {
    errorCorrectionLevel: props.errorLevel,
    type: 'image/png',
    quality: 1,
    margin: 3,
    scale: props.scale, // 8px per modules(black dots)
    color: {
      dark: props.color, // 像素点颜色
      light: props.bgColor // 背景色
    }
  })
})
</script>
<template>
  <div class="m-qrcode" :class="{'bordered': bordered}" :style="`width: ${size}px; height: ${size}px; border-color: ${borderColor};`">
    <img :src="qrcode.value" class="u-qrcode" alt="QRCode" />
  </div>
</template>
<style lang="less" scoped>
.m-qrcode {
  display: inline-block;
  border-radius: 8px;
  overflow: hidden;
  .u-qrcode {
    width: 100%;
    height: 100%;
  }
}
.bordered {
  border-width: 1px;
  border-style: solid;
}
</style>

②在要使用的页面引入:

<script setup lang="ts">
import QRCode from './QRCode.vue'
import { ref } from 'vue'
const size = ref(160)
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
  }
}
</script>
<template>
  <div>
    <h1>QRCode 二维码</h1>
    <h2 class="mt30 mb10">基本使用</h2>
    <QRCode value="https://blog.csdn.net/Dandrose"/>
    <h2 class="mt30 mb10">无边框</h2>
    <QRCode
      value="https://blog.csdn.net/Dandrose"
      :bordered="false" />
    <h2 class="mt30 mb10">纠错等级</h2>
    <h3 class="mb10">纠错等级也叫纠错率,就是指二维码可以被遮挡后还能正常扫描,而这个能被遮挡的最大面积就是纠错率。</h3>
    <h3 class="mb10">通常情况下二维码分为 4 个纠错级别:L级 可纠正约 7% 错误、M级 可纠正约 15% 错误、Q级 可纠正约 25% 错误、H级 可纠正约30% 错误。并不是所有位置都可以缺损,像最明显的三个角上的方框,直接影响初始定位。中间零散的部分是内容编码,可以容忍缺损。当二维码的内容编码携带信息比较少的时候,也就是链接比较短的时候,设置不同的纠错等级,生成的图片不会发生变化。</h3>
    <QRCode value="https://blog.csdn.net/Dandrose" error-level="M" />
    <h2 class="mt30 mb10">自定义尺寸</h2>
    <Space>
      <Button @click="decline">
        <svg focusable="false" data-icon="minus" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M872 474H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h720c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"></path></svg>
        <span style="margin-inline-start: 8px;">small</span>
      </Button>
      <Button @click="increase">
        <svg focusable="false" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"></path></svg>
        <span style="margin-inline-start: 8px;">large</span>
      </Button>
    </Space>
    <br/>
    <br/>
    <QRCode
      :size="size"
      value="https://blog.csdn.net/Dandrose" />
    <h2 class="mt30 mb10">自定义样式</h2>
    <h3 class="mb10">自定义二维码颜色和背景色</h3>
    <Space>
      <QRCode
        value="https://blog.csdn.net/Dandrose"
        color="#52c41a" />
      <QRCode
        value="https://blog.csdn.net/Dandrose"
        color="#1677FF"
        bg-color="#f5f5f5" />
    </Space>
  </div>
</template>
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用qrcode.vue生成二维码的步骤如下: 1. 引入qrcode.vue组件,该组件的体积相对较小,但不能添加中心logo。 2. 在Vue模板中使用vue-qr组件,设置id为"qrcode",并传入生成二维码所需的text和size参数。 3. 在Vue模板中添加一个按钮,当点击按钮时触发saveImg函数。 4. 在Vue的script setup中,使用import语句引入qrcode.vue组件和其他所需的资源。 5. 根据需要,可以在logoSrc变量中设置logo的路径。 6. 在saveImg函数中,获取生成的二维码图片元素,创建一个下载链接,并设置链接的href和download属性。 7. 点击按钮后,调用a元素的click方法,实现下载二维码的功能。 你可以参考以下代码示例: ```html <template> <qrcode id="qrcode" :text="value" size="135"></qrcode> <br /> <el-button @click="saveImg">下载二维码</el-button> </template> <script setup> import qrcode from 'qrcode.vue' import code_logo from '../../assets/vue.svg' const props = defineProps({ value: { type: String, default: 'https://www.baidu.com/' } }) let logoSrc = code_logo function saveImg() { let picData = document.getElementById("qrcode") let a = document.createElement("a"); a.href = picData.src; a.download = "qrcode.png"; a.click(); } </script> ``` 请注意,以上代码只是一个示例,具体的实现方式可能会根据你的实际需求和项目配置而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3项目生成并下载二维码,关于vue-qr.vueqrcode.vue插件之间的区别](https://blog.csdn.net/qq_51758070/article/details/128232266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值