解决qrcode生成的二维码安卓手机长按不识别问题

问题描述

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

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

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

<!--用于存放canvas,隐藏-->
<div id="QRCodeNone" style="width:54%;height:200px;margin:8% 0 8% 23%;display:none;">
</div>
<!--用于存放二维码图片-->
<div id="QRCode" style="width:54%;height:200px;margin:8% 0 8% 23%;">
</div>

js

function makeQRCode() {
    var qrcode = new QRCode(document.getElementById("QRCodeNone"), {
        text: params,//二维码数据
        width: 200,
        height: 200
    });
    //在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,所以需要特殊处理一下,将canvas标签隐藏,拿到生成的url放到img里面再展示出来
    var myCanvas = document.getElementsByTagName('canvas')[0];
    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;紧接着就是文件编码后的内容了。

原文链接:https://blog.csdn.net/weixin_40970987/article/details/94393259

自己验证

<body>

<div class="alert alert-warning" style="padding: 10px 0;">
    <h1 class="text-center" style="font-size: 50px;">访客身份二维码</h1>
</div>
<div class="container-fluid">
        <div id="QRCodeNone" style="width: 550px;height:550px;margin: 0 auto;"></div>
        <div id="qrcode" style="width: 550px;height:550px;margin: 0 auto;">
</div>

<h2 class="text-center" style="font-size: 50px;">恭喜您,信息登记成功!</h2>
<h2 class="text-danger text-center" style="margin-top: 20px;">
    <strong>温馨提示:此二维码是您出入厂区的身份证明,请保存至手机相册!</strong>
</h2>


<script>
    (function () {
            var authUrl = '${authUrl}';
            var qrcode = new QRCode('QRCodeNone', {
                    text: authUrl,
                    width: 550,
                    height: 550,
                    colorDark: '#04ad28',
                    colorLight: '#ffffff',
                    correctLevel: QRCode.CorrectLevel.H
                }
            );
            //原文链接:https://blog.csdn.net/weixin_40970987/article/details/94393259
            //在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,所以需要特殊处理一下,将canvas标签隐藏,拿到生成的url放到img里面再展示出来
            var myCanvas = document.getElementsByTagName('canvas')[0];
            var img = convertCanvasToImage(myCanvas);
            $("#qrcode").append(img);
            $("#QRCodeNone").remove();
            //将canvas返回的图片添加到image里
            function convertCanvasToImage(canvas){
                var image = new Image();
                image.src = canvas.toDataURL("image/png");
                return image;
            }
        }
    )();
</script>
</body>

要在Vue中使用qrcode生成二维码,你可以按照以下步骤进行操作: 1. 首先,你需要安装qrcode插件,你可以使用npm命令来安装:npm i qrcode -S 。 2. 然后,在你的Vue组件中引入qrcode插件:import QRCode from 'qrcode' 。 3. 接下来,在你的Vue组件的template中添加一个img标签,用于显示生成二维码图片。例如: ``` <template> <div> <img :src="QRImgUrl" /> </div> </template> ``` 4. 在Vue组件的script中,使用QRCode生成二维码的方法。首先,你需要定义一个data属性QRImgUrl用于存储生成二维码图片的URL。然后,在created钩子函数中调用getQRcode方法来生成二维码。getQRcode方法使用QRCode.toDataURL来生成二维码图片的DataURL,并将生成的URL赋值给QRImgUrl。例如: ``` <script> import QRCode from 'qrcode' export default { data() { return { QRImgUrl: '', QRlink:'www.xxx.com' } }, created() { this.getQRcode() }, methods: { getQRcode(){ QRCode.toDataURL(this.QRlink, { errorCorrectionLevel: 'L', margin: 2, width: 128 }, (err, url) => { if (err) throw err this.QRImgUrl = url }) } } } </script> ``` 这样,当你的Vue组件被创建时,getQRcode方法会被调用,生成二维码并将URL赋值给QRImgUrl,从而显示在页面上 。 如果你想对生成二维码进行更详细的配置,你可以参考以下步骤: 1. 在getQRcode方法中定义一个opts对象,用于配置生成二维码的各种参数,比如容错级别、二维码类型、二维码质量、留白边距等 。 2. 修改QRCode.toDataURL方法的第二个参数为opts,这样可以根据opts的配置生成更加符合你需求的二维码 。 例如,你可以按照以下方式配置opts对象: ```javascript let opts = { errorCorrectionLevel: "L",//容错级别 type: "image/png",//生成二维码类型 quality: 0.3,//二维码质量 margin: 5,//二维码留白边距 width: 128,//宽 height: 128,//高 text: "http://www.xxx.com",//二维码内容 color: { dark: "#666666",//前景色 light: "#fff"//背景色 } }; ``` 然后,将opts作为QRCode.toDataURL方法的第二个参数传入: ```javascript QRCode.toDataURL(this.QRlink, opts, (err, url) => { if (err) throw err this.QRImgUrl = url }) ``` 这样,你就可以根据opts的配置生成定制化的二维码 。 综上所述,你可以按照以上步骤在Vue中使用qrcode生成二维码,并根据需要进行详细的配置 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值