问题形容:
在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=datauri; //如果你不想Uint8ClampedArray RGBA 全副返回0的话,用promise包起来是个好主见 return new Promise((resolve) => { img.onload = () => { ctx.drawImage(img, 0, 0,300,300); let data = 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; } }) }) }, };<Upload {...props}> <div>辨认</div></Upload>
进阶:
能够联合webRTC实时辨认。有大佬曾经实现了,参考链接https://github.com/dragonir/h...