【踩坑】qrcodejs生成二维码真机不显示(解决部分机型二维码绘制失败)

本文介绍了一个使用qrcode.js生成二维码并将其绘制到canvas时遇到的问题。在特定设备上,由于png格式不兼容导致二维码无法显示。通过将图片格式从png转换为jpg解决了此问题。

crossorigin最近,遇到一个用qrcode.js生成二维码绘制海报失败的问题,在网上搜了很多文章都没查到,最后自己踩坑解决了……

1、问题描述:
         用qrcode.js生成base64二维码图片绘制进canvas画布,在电脑浏览器和部分真机调试都没问题,然而在某些真机就会显示不了二维码……

2、分析原因:
        经过一系列踩坑后,发现qrcode.js自带生成的base64图片是png格式,然而部分真机存在无法将png图片绘制进canvas的情况,导致base64的png图片绘制失败,无法显示二维码。

3、解决方法:

        将qrcode.js生成base64的png图片再转成jpg格式后,再绘制进canvas就可以正常显示啦~

核心代码:

1. 安装qrcode.js

npm install qrcode

2. html

<template>
    <div class="qrcode" id="qrCodeUrl" ref="qrCodeUrl"></div>
</template>

3. js

<script>
import QRCode from 'qrcodejs2'
export default {
    methods: {
        drawQrc() {
          let _this = this
          this.textUrl = 'https://www.youkuaiyun.com'
          var qrcode = new QRCode(this.$refs.qrCodeUrl, {
              text: _this.textUrl, // 需要转换为二维码的内容
              width: 200,
              height: 200,
              colorDark: '#000000',
              colorLight: '#ffffff',
              correctLevel: QRCode.CorrectLevel.H
         })
         console.log('-qrcode', qrcode)
         setTimeout(() => {
             let qrCanvs = document.querySelector('#qrCodeUrl > canvas')
             let qrcBase64 = qrCanvs.toDataURL('image/jpeg')  /* 转成jpg */
             let qrcImg = new Image()
             // qrcImg.setAttribute("crossOrigin", "Anonymous");
             qrcImg.crossOrigin = 'anonymous'
             qrcImg.src = qrcBase64
             qrcImg.style = 'display:block; width:0; height:0'
             qrcImg.id = 'qrcImg'
             document.body.appendChild(qrcImg)
             qrcImg.onload = function() {
                 setTimeout(() => {
                     _this.ctx.drawImage(qrcImg, 528, 1056, 134, 134)
                     document.querySelector('#qrcImg').remove()
                 }, 50)
             }
         }, 500)
    }
}

</script>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值