当前位置: 首页 > news >正文

JavaScript:二维码生成与解析

生成二维码

生成二维码使用qrcode库

  1. 安装
npm install qrcode -S
  1. 引入
import qrcode from 'qrcode'
  1. 调用方法生成二维码
qrcode.toString('hello world', (err,res) => {
	if(err) throw err;
	console.log(res);
});

效果如下:
在浏览器中打印会返回svg图片
在这里插入图片描述

二维码的展示

二维码通常是以图片展示,便于保存,能够用图片显示一种是通过url,一种是通过base64展示,还可以通过canvas绘制显示。

由于浏览器不能生成文件因此,不能通过生成url进行展示,因此通过base64进行展示。
使用qrcode生成base64数据,需要使用toDataURL()方法。

qrcode.toDataURL('hello world', (err, res) => {
	if(err) throw err;
	console.log(res);
	 let img = new Image();
	 img.onload = function (){
	 	document.body.appendChild(img);
	 }
});

在这里插入图片描述

使用 qrcode 通过canvas绘制显示,需要使用 qrcode.toCanvas() 方法

qrcode.toCanvas('hello wrold', (err,res) => {
	if(err) throw err;
 	 // 返回的结果是canvas元素
  	document.body.appendChild(res);
});

效果如下:
在这里插入图片描述
在这里插入图片描述

qrcode库在浏览器端和服务端能使用的API数量是不一样的,以上几个API可以在浏览器端使用,
下面几个只能在服务器端使用,在服务器端除了下面几个特有的API之外还包括上面几个API。

在服务器端可以把二维码输出为一个文件
qrcode.toFile()
参数:

  • path:输出文件的路径
  • text:要转换成二维码的文本
  • options:可选,是配置项
  • callback:回调函数,回调函数的第一个参数是错误对象,第二个参数是返回的结果
qrcode.toFile('./output/qrcode.png','hello world', (err,res) => {
	if(err) throw err;
	console.log(res,err);
});

qrcode.toFile()调用完毕后会在指定路径生成一个文件,该文件就是生成的二维码图片。

qrcode.toBuffer()
参数:

  • text:要转换为二维码的文本
  • options:选项对象
  • callback:回调函数,回调函数的第一个参数是错误对象,第二个参数是返回的结果
qrcode.toBuffer('hello world', (err, res) => {
  console.log(res, err);
});

qrcode.toBuffer()返回的是一个Buffer数据
在这里插入图片描述

二维码的解析

有的时候需要将二维码图片解析成文本数据,例如,手机扫描二维码显示数据,这时就需要把获得的二维码图片解析成能够显示的文本数据。

解析二维码使用qrcode-parser库

  1. 安装
npm install qrcode-parser -S
  1. 引入
import qrcodeParser from 'qrcode-parser'
  1. 解析
qrcode.toDataURL('hello world', (err, res) => {
  qrcodeParser(res).then(res => {
    console.log(res);
   }).catch(err => {
    console.log(err);
  });
});

效果如下:
在这里插入图片描述

实例:通过上传文件解析二维码

let fileInput = document.getElementById('qrCodeInput');
fileInput.onchange = function(e){
  let file = e.target.files[0];
  qrcodeParser(file).then(res => {
    console.log(res);
  });
}

在这里插入图片描述

相关文章:

  • SpringBoot 2 配置文件 2.4 多环境配置
  • JavaWeb编年史(远古时期)
  • 【Spring】面向切面编程详解(AOP)
  • 第四课 ceph基础学习-RGW高可用集群和集群测试
  • 幼儿园小程序实战开发教程
  • JavaScript基础总结---重点
  • HashMap和Hashtable(全网最详细)
  • 【趣学算法】Day1 算法简介+斐波那契数列
  • JDK 9-17 新特性介绍
  • 力扣 每日一题 902. 最大为 N 的数字组合【难度:困难,rating: 1989】(数学 / 数位dp)
  • 【微信小程序】电商移动前端API文档
  • 基于FPGA的远程升级系统概述
  • 适用于非科班的深度学习/机器学习快速上手路线
  • 【Python 之 Bluebridge Cup】day_007(涉VIP题,目前没有权限提交,需再提交):阶乘计算(高精度) || 高精度加法
  • 3、初识MySQL
  • Angular 响应式表单 基础例子
  • es的写入过程
  • JavaScript对象详解
  • leetcode388. Longest Absolute File Path
  • Linux后台研发超实用命令总结
  • Objective-C 中关联引用的概念
  • overflow: hidden IE7无效
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 入门到放弃node系列之Hello Word篇
  • 十年未变!安全,谁之责?(下)
  • 问题之ssh中Host key verification failed的解决
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 【云吞铺子】性能抖动剖析(二)
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​低代码平台的核心价值与优势
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #if和#ifdef区别
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #LLM入门|Prompt#3.3_存储_Memory
  • #stm32整理(一)flash读写
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $$$$GB2312-80区位编码表$$$$
  • (03)光刻——半导体电路的绘制
  • (12)Linux 常见的三种进程状态
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (论文阅读11/100)Fast R-CNN
  • (十六)Flask之蓝图
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)SpringBoot3---尚硅谷总结
  • (转)IOS中获取各种文件的目录路径的方法
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)