前端方案:根据链接生成二维码

前言:

虽然在很多时候,生成二维码的操作都是由后端进行操作。但是在某些特定的场景里,难免会需要前端来完成链接生成二维码的操作,在这里我们提供一个插件来完成,这个插件就是qrcode。

官方地址

安装:

复制代码
npm install --save qrcode
javascript 复制代码
// ts声明
npm i --save-dev @types/qrcode

ES6/ES7示例:

javascript 复制代码
import QRCode from 'qrcode'

// With promises
QRCode.toDataURL('I am a pony!')
  .then(url => {
    console.log(url)
  })
  .catch(err => {
    console.error(err)
  })

// With async/await
const generateQR = async text => {
  try {
    console.log(await QRCode.toDataURL(text))
  } catch (err) {
    console.error(err)
  }
}

相关常用API:

toDataURL(text, [options], [cb(error, url)])

作用:根据链接生成二维码并转换成一个base64的图片地址。返回一个包含QR码图像表示的数据URI。目前只适用于image/png类型。(options选填

javascript 复制代码
import QRCode from 'qrcode';

QRCode.toDataURL('I am a pony!', function (err, url) {
  console.log(url) //base64图片地址
})

vue示例:

javascript 复制代码
<template>
  <div>
    <h1>二维码</h1>
    <img
      :src="imageUrl"
      mode="scaleToFill"
    />
  </div>
</template>

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

const imageUrl = ref('');

(
  function getQrcode() {
    QRCode.toDataURL('I am a pony!')
      .then(url => {
        console.log(url)
        imageUrl.value = url
      })
      .catch(err => {
        console.error(err)
      })
  }
)()
</script>

页面效果展示:

扫码展示:

console打印:


toString(text, [options], [cb(error, string)])

作用:链接生成二维码并转换成一个svg标签字符串。返回QR码的字符串表示形式。(options选填

javascript 复制代码
import QRCode from 'qrcode';

QRCode.toString('http://www.google.com', function (err, string) {
  if (err) throw err
  console.log(string)//svg字符串
})

vue示例:

javascript 复制代码
<template>
  <div>
    <h1>二维码</h1>
    <div v-html="imageUrl" style="width: 100px; height: 100px"></div>
  </div>
</template>

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

const imageUrl = ref('');

(
  function getQrcode() {
    QRCode.toString('http://www.google.com', 
    function (err, string) {
      if (err) throw err
      imageUrl.value = string
      console.log(string)//svg字符串
    })
  }
)()
</script>

页面效果:

扫码展示:

console打印:


toCanvas(canvas, text, [options], [cb(error)])

作用:根据链接生成二维码放置在指定的canvas标签上(options选填

javascript 复制代码
 import QRCode from 'qrcode';

 QRCode.toCanvas(document.getElementById('canvas'), 'http://www.google.com', 
  function (error) {
    if (error) throw error;
    console.log('success!');
  });

vue示例:

javascript 复制代码
<template>
  <canvas id="canvas"></canvas>
</template>

<script setup>
import { onMounted } from 'vue'
import QRCode from 'qrcode';

onMounted(() => {

  const options = { // 设置二维码的参数,例如大小、边距等
    width: 200,
    height: 200,
    margin: 2,
  };

  (
    function getQrcode() {
      QRCode.toCanvas(
        document.getElementById('canvas'),
        'http://www.google.com',
        options,
        function (error) {
          if (error) throw error;
          console.log('success!');
        });
    }
  )()
})
</script>

页面展示:

扫码展示:

options配置项(可选配)

示例:

javascript 复制代码
import QRCode from 'qrcode'

var options = {
  errorCorrectionLevel: 'H',
  margin: 1,
  color: {
    dark:"#010599FF",
    light:"#FFBF60FF"
  }
}

QRCode.toDataURL('http://www.google.com', options, 
function (err, url) {
  if (err) throw err
  var img = document.getElementById('image')
  img.src = url
})

|----------------------|----------|---------------------------------------------------------------------------|
| 二维码选项 | 类型 | 描述 |
| version | Number | 二维码版本。如果未指定,将计算更合适的值。 |
| errorCorrectionLevel | String | 纠错级别。 可能的值为 或 。low, medium, quartile, high,L, M, Q, H |
| maskPattern | Number | 用于遮罩符号的掩码图案。 可能的值为 0, 1, 2, 3, 4, 5, 6, 7 如果未指定,将计算更合适的值。 |
| toSJISFunc | Function | 在内部用于将汉字转换为其 Shift JIS 值的帮助程序函数。 如果您需要支持汉字模式,请提供此功能。 |

|-------------|---------|---------------------------------------------------------|
| 渲染器选项 | 类型 | 描述 |
| margin | Number | 类型:Number 默认:4 定义安静区应有多宽。 |
| small | Boolean | 默认:false 仅与终端渲染器相关。输出较小的二维码。 |
| scale | Number | 默认:4 比例因子。值 表示每个模块 1px(黑点)。1 |
| width | Number | 强制输出图像的特定宽度。 如果宽度太小而无法包含qr符号,则此选项将被忽略。 优先于规模。 |
| color.dark | String | 默认:#000000ff 深色模块的颜色。值必须采用十六进制格式 (RGBA)。 注意:深色应该总是比浅色深。 |
| color.light | String | 默认:#ffffffff 灯光模块的颜色。值必须采用十六进制格式 (RGBA)。 |

相关推荐
爱上妖精的尾巴25 分钟前
8-5 WPS JS宏 match、search、replace、split支持正则表达式的字符串函数
开发语言·前端·javascript·wps·jsa
小温冲冲28 分钟前
通俗且全面精讲单例设计模式
开发语言·javascript·设计模式
意法半导体STM321 小时前
【官方原创】FDCAN数据段波特率增加后发送失败的问题分析 LAT1617
javascript·网络·stm32·单片机·嵌入式硬件·安全
为什么不问问神奇的海螺呢丶1 小时前
n9e categraf redis监控配置
前端·redis·bootstrap
云飞云共享云桌面1 小时前
推荐一些适合10个SolidWorks设计共享算力的服务器硬件配置
运维·服务器·前端·数据库·人工智能
Liu.7741 小时前
vue开发h5项目
vue.js
咔咔一顿操作1 小时前
轻量无依赖!autoviwe 页面自适应组件实战:从安装到源码深度解析
javascript·arcgis·npm·css3·html5
刘联其2 小时前
.net也可以用Electron开发跨平台的桌面程序了
前端·javascript·electron
韩曙亮2 小时前
【jQuery】jQuery 选择器 ④ ( jQuery 筛选方法 | 方法分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找 )
前端·javascript·jquery·jquery筛选方法
前端 贾公子2 小时前
Node.js 如何处理 ES6 模块
前端·node.js·es6