zoukankan      html  css  js  c++  java
  • qrcode生成的二维码华为手机长按不识别问题

    问题描述

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

    问题原因

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

    解决办法

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

     1 function makeQRCode() {
     2     var qrcode = new QRCode(document.getElementById("QRCodeNone"), {
     3         text: params,//二维码数据
     4          200,
     5         height: 200
     6     });
     7     //在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,所以需要特殊处理一下,将canvas标签隐藏,拿到生成的url放到img里面再展示出来
     8     var myCanvas = document.getElementsByTagName('canvas')[0];
     9     var img = convertCanvasToImage(myCanvas);
    10     $("#QRCode").append(img);
    11 };
    12 //将canvas返回的图片添加到image里
    13 function convertCanvasToImage(canvas){
    14     var image = new Image();
    15     image.src = canvas.toDataURL("image/png");
    16     return image;
    17 }

    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

  • 相关阅读:
    大数据学习笔记之一:大数据初识
    从漏洞中总结编程规范(转发)+自我补充
    软件性能测试的基本概念和计算公式(转发)
    系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式(转发)
    Linux学习记录(三):time 相关
    Linux报错第一弹: /bin/sh^M: bad interpreter: No such file or directory
    Linux学习记录(二)----if
    SVN 提交出错1
    java.lang.NoClassDefFoundError
    git 将文件取消版本控制
  • 原文地址:https://www.cnblogs.com/jidanbufan/p/13919580.html
Copyright © 2011-2022 走看看