vue3里前端生成二维码和解析二维码(不需要后端参与)
1.生成二维码
1)安装qrcode
npm install qrcode
2)生成二维码代码
生成二维码
import QRCode from 'qrcode';
const formData = ref({
designation:'',
people:'',
})
const QRCodeType = ref(0)
// 生成二维码
const generateQRCode = async () => {
try {
// 获取 canvas 元素的引用
const canvas = document.querySelector('canvas');
// 将输入字段合并成一个字符串
let data = generateString(formData.value);
console.log(data)
// 使用 qrcode 库生成二维码
await QRCode.toCanvas(canvas, data || '', { errorCorrectionLevel: 'H' });
QRCodeType.value = 1
}catch (error) {
console.error('Error generating QR code:', error);
}
// 对象合成字符串的方法
const generateString = (formData) => {
let result = ''
for (const key in formData) {
if (formData.hasOwnProperty(key)) {
result += formData[key] + ','
}
}// 去掉末尾的逗号
result = result.slice(0, -1)
return result
}
};
2.解析二维码
1)安装 jsqr
npm install jsqr
2)解析二维码代码
父组件
import parseQRCode from './components/parseQRCode.vue'
// 获取得到的二维码数据
const getCodeData = (vm) =>{
const codeData = vm.split(',');
console.log(codeData,'获取得到的二维码数据',vm)
formData.value.designation = codeData[0]
formData.value.people = codeData[1]
}
子组件
从图像二维码导入
{ decodedValue }}
未找到二维码
-->
import { ref } from 'vue';
import jsQR from 'jsqr';
const decodedValue = ref(null);
const emits = defineEmits([
'get-code-data',
])
const openFileInput = () => {
const fileInput = document.getElementById('fileInput');
if (fileInput) {
fileInput.click();
}
};
const handleFileChange = (event) => {
const file = event.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (event) => {
const image = new Image();
image.onload = () => {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width;
canvas.height = image.height;
context.drawImage(image, 0, 0);
const imageData = context.getImageData(0, 0, image.width, image.height);
const code = jsQR(imageData.data, image.width, image.height);
if (code) {
decodedValue.value = code.data;
emits('get-code-data', code.data);
} else {
decodedValue.value = null;
}
};
image.src = event.target.result;
};
reader.readAsDataURL(file);
};
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
