Vue3中进行二维码的生成与解码实现详解

 更新时间:2023年03月02日 15:49:07   作者:隐兮  
这篇文章主要为大家介绍了Vue3中进行二维码的生成与解码实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用到的库

最近在项目中需要使用到二维码的生成解码来进行一些认证操作,在此记录一下我的学习过程。

npm i qrcode.vue --save // 用来生成二维码的qr库
npm i jsqr --save // 用来解码的库

github地址:

github.com/scopewu/qrc…

github.com/cozmo/jsQR

生成二维码的流程

我的需求是用二维码来保存一个对象,对象中保存着许多复杂的信息,用户首次填写完信息,获取二维码,下次只需要上传二维码就不用重复输入信息了。

在我们的组件中导入这个库

import QrcodeVue from 'qrcode.vue';

简单使用如下:

<template>
    <div>
        <qrcode-vue :value="value" :size="size" level="H"></qrcode-vue>
    </div>
</template>
<script setup>
import QrcodeVue from 'qrcode.vue';
components: {
QrcodeVue
};
const value = JSON.stringify({name: 'limiang', age: 14});  //传入的值,要求是字符串,需要将对象进行转换
const size = 200; //二维码大小
</script>

页面显示:

二维码的解码过程

使用jsqr对二维码进行解码我们了解一下它传入的参数,阅读一下npm文档:

npm地址:www.npmjs.com/package/jsq…

可以看到imageData参数要求的格式是Uint8clampedArray,它通常来自ImageData接口,因此我们将使用canvas来获取这个数据。

实现思路

1:创建一个img实例,将img.src设置为我们的二维码地址,这里我们用vant的上传组件,在回调中获取到file.content,是一个base64码

   img.src= file.content;

2:因为图片需要在加载完成之后才能使用,因此在img.onload中编写我们的解码代码

3:创建canvas画布

// 将图像绘制到canvas中
const canvas = document.createElement('canvas');
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
// 获取图像数据
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);

4:这里的getImageData() 方法返回的就是Uint8clampedArray

5:最后,我们使用jsqr解码

const qrdata = jsqr (imageData.data, imageData.width, imageData.height);

完整代码:

<template>
    <div>
        <van-uploader :after-read="afterRead" />
    </div>
</template>
<script setup>
import jsqr from 'jsqr'
function afterRead(file) {
// 创建图像元素
const img = new Image();
img.onload = () => {
// 将图像绘制到canvas中
const canvas = document.createElement('canvas');
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
// 获取图像数据
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
//二维码解码
const qrdata = jsqr(imageData.data, imageData.width, imageData.height);
//字符串转对象
let option = JSON.parse(qrdata.data);
console.log(option);
}
img.src= file.content;
}
</script>

以上就是简单的实现二维码生成和解码的过程,大家也可以将它们封装成组件来使用。

更多关于Vue3二维码生成解码的资料请关注脚本之家其它相关文章!

相关文章

  • vue实现打包添加二级目录

    vue实现打包添加二级目录

    这篇文章主要介绍了vue实现打包添加二级目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Vue数据与事件绑定以及Class和Style的绑定详细讲解

    Vue数据与事件绑定以及Class和Style的绑定详细讲解

    这篇文章主要介绍了Vue数据与事件绑定以及Class和Style的绑定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 利用Vue构造器创建Form组件的通用解决方法

    利用Vue构造器创建Form组件的通用解决方法

    这篇文章主要给大家介绍了关于利用Vue构造器创建Form组件的通用解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 详解Vue中添加过渡效果

    详解Vue中添加过渡效果

    本篇文章主要介绍了详解Vue中添加过渡效果 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Vue.js之mixins混合组件详解

    Vue.js之mixins混合组件详解

    这篇文章主要介绍了Vue.js之mixins混合组件详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Vue3学习之表单的使用示例详解

    Vue3学习之表单的使用示例详解

    这篇文章主要为大家详细介绍了Vue3中表单的使用的相关知识,文中的示例代码讲解详细,对我们掌握Vue3有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • vue单应用在ios系统中实现微信分享功能操作

    vue单应用在ios系统中实现微信分享功能操作

    这篇文章主要介绍了vue单应用在ios系统中实现微信分享功能操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue Element前端应用开发之根据ABP后端接口实现前端展示

    Vue Element前端应用开发之根据ABP后端接口实现前端展示

    本篇着重介绍基于ABP后端接口信息,实现对前端界面的开发工作。
    2021-05-05
  • vue中实现一个项目里兼容移动端和pc端

    vue中实现一个项目里兼容移动端和pc端

    这篇文章主要介绍了vue中实现一个项目里兼容移动端和pc端问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vue2路由跳转传参中文问题处理方案

    Vue2路由跳转传参中文问题处理方案

    在el-table中的记录列表中放置了一个 操作按钮,点这个按钮时可以新增一个tab页签,并将通过路由传参方式将一些信息传递到新打开的tab页签中,但发现传递中文参数时会出现报错,所以本文给大家介绍了Vue2路由跳转传参中文问题处理方案,需要的朋友可以参考下
    2024-05-05

最新评论