解决qrcode生成的二维码华为手机长按不识别、toDataURL之后中间logo丢失等问题 您所在的位置:网站首页 长按二维码没反应 解决qrcode生成的二维码华为手机长按不识别、toDataURL之后中间logo丢失等问题

解决qrcode生成的二维码华为手机长按不识别、toDataURL之后中间logo丢失等问题

2023-07-27 11:46| 来源: 网络整理| 查看: 265

问题描述

qrcode生成的二维码,在苹果等手机上长按可识别,在华为手机上长按没有反应,截图保存下来长按又可以识别。

问题原因

浏览器兼容问题 qrcode在页面生成二维码时,会生成一个canvas标签和一个img标签。在电脑浏览器上调试的时候,发现生成二维码之后canvas标签是会自动隐藏的,然后展示img标签,我们看到和识别的其实是图片。但是在华为手机上生成的canvas是不会隐藏的,我们看到的是canvas,所以无法识别,截图却可以。

解决办法

手动将canvas隐藏,获取生成的链接拼到图片里面。 html页面:

js:

function makeQRCode() { var width = 200,height = 200; var shareUrl = "分享出去的链接" var x = width * 0.4, y = height * 0.4, lx = width * 0.2, ly = height * 0.2; $("#QRCode").qrcode({ render: "canvas", text: shareUrl, width : width, //二维码的宽度 height : height, //二维码的高度 background : "#ffffff", //二维码的后景色 foreground : "#3498db" //二维码的前景色 //src: "logo" }); //在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,所以需要特殊处理一下,将canvas标签隐藏,拿到生成的url放到img里面再展示出来 var myCanvas = document.getElementsByTagName('canvas')[0]; //添加logo,qrcode中src方式带的logo因为跨域等问题,在toDataURL会丢失,这儿手动绘制一个 myCanvas.getContext('2d').drawImage($("#qrCodeIco")[0], x, y, lx, ly); var img = convertCanvasToImage(myCanvas); $("#QRCode").append(img); }; //将canvas返回的图片添加到image里 function convertCanvasToImage(canvas){ var image = new Image(); image.src = canvas.toDataURL("image/png"); return image; } toDataURL语法

canvas.toDataURL(type, encoderOptions); 返回一个包含图片展示的 data URI 参数 type 可选 图片格式,默认为image/png encoderOptions 可选 图片质量。取值范围为0到1。如果指定图片格式为image/jpeg或image/webp。如果超出取值范围,将会使用默认值0.92。其他参数会被忽略。

返回值 包含dataURI的DOMString。 DataURI格式:data:[][;base64],。其中mediatype声明了文件类型,遵循MIME规则,如“image/png”、“text/plain”;之后是编码类型,这里我们只涉及 base64;紧接着就是文件编码后的内容了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有