问题描述:
【AntD+jsQr做一个简单的前端二维码识别】在antD中前端做一个二维码识别功能,时间紧,做了一个简陋版。
原料:
antD upload控件+jsQR
原料链接:
【jsQR】 https://github.com/cozmo/jsQR
【AntD Upload】 https://ant-design.gitee.io/c...
思路:
获取upload上传的二维码图片,使用jsQR识别
补充:
upload可以获得File对象,也就是可以获得一个base64图片,将base64画在canvas上,再通过getImageData获取到jsQR需要的Uint8ClampedArray数据。
简易代码:
getBase64=(file)=>{
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
imageAppendCanvas=(datauri)=>{
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
canvas.width=500;
canvas.height=500;
// document.body.append(canvas);
//如果想看看这个图片的话
const img = new Image();
img.src=https://www.it610.com/article/datauri;
//如果你不想Uint8ClampedArray RGBA 全部返回0的话,用promise包起来是个好主意
return new Promise((resolve) => {
img.onload = () => {
ctx.drawImage(img, 0, 0,300,300);
let data = https://www.it610.com/article/ctx.getImageData(0, 0, 300, 300).data;
resolve(data);
};
});
};
const props = {
name: 'file',
showUploadList:false,
customRequest(fileObj){
getBase64(fileObj.file).then(rs =>{
imageAppendCanvas(rs).then(res=>{
const code = jsQR(res, 300, 300);
if (code) {
const {data}=code;
}
})
})
},
};
识别
进阶:
可以结合webRTC实时识别。有大佬已经实现了,参考链接https://github.com/dragonir/h...