js使用qrcode与canvas生成带logo的二维码

打印 上一主题 下一主题

主题 817|帖子 817|积分 2451

qrcode库

 文档

   https://www.npmjs.com/package/qrcode
   安装

  1. npm i qrcode
复制代码
使用

   errorCorrectionLevel: 'H'  // 容错率(H是最高,别的看文档)
  width: 200 // 大小
  margin: 2 // 边距
  1. import QRCode from 'qrcode'
  2. const testFn = async () => {
  3.     const img= await QRCode.toDataURL('https://www.baidu.com/', { errorCorrectionLevel: 'H', width: 200, margin: 2 })
  4.     console.log(img)
  5. }
复制代码
canvas绘图

文档

   https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API
  使用

html
  1. <canvas id="myCanvas" width="100" height="100" style="border: 1px solid #ccc"></canvas>
复制代码
js
  1. const canvas = document.getElementById('myCanvas')
  2. // 设置画布宽高(也可内联样式写标签上)
  3. canvas.width = 200
  4. canvas.height = 200
  5. // 获取 2d 上下文对象
  6. const ctx = canvas.getContext('2d')
  7. // 绘制圆
  8. // 设置圆的属性
  9. const centerX = canvas.width / 2 // 圆心 X 坐标
  10. const centerY = canvas.height / 2 // 圆心 Y 坐标
  11. const radius = 30 // 圆的半径
  12. ctx.beginPath() // 开始路径
  13. ctx.arc(centerX, centerY, radius, 0, Math.PI * 2, false) // 绘制圆
  14. ctx.fillStyle = '#f9f9f9' // 填充颜色
  15. ctx.fill() // 填充圆
  16. ctx.closePath() // 关闭路径
  17. // 绘制文本
  18. ctx.font = '10px' // 文本大小
  19. ctx.fillStyle = 'blue' // 颜色
  20. ctx.textAlign = 'center' // 水平对齐
  21. ctx.textBaseline = 'middle' // 垂直对齐
  22. ctx.fillText('绘制文本', canvas.width / 2, canvas.height / 2)
复制代码
 结果


合并图片方法

  1. function mergeImages() {
  2.   const canvas = document.createElement('canvas')
  3.   const ctx = canvas.getContext('2d')
  4.   // 创建两个图片对象
  5.   const img1 = new Image()
  6.   const img2 = new Image()
  7.   img1.src = 'https://www.test.com/menu.png'
  8.   img2.src = 'https://www.test.com//logo.png'
  9.   // 等待两张图片加载完成
  10.   let imagesLoaded = 0
  11.   img1.onload = img2.onload = function () {
  12.     imagesLoaded++
  13.     if (imagesLoaded === 2) {
  14.       // 当两张图片都加载完成后,绘制到 Canvas 上
  15.       ctx.drawImage(img1, 0, 0) // 绘制第一张图片
  16.       ctx.drawImage(img2, 50, 0) // 绘制第二张图片,x偏移 50 像素
  17.       // 下载合并后的图片
  18.       const link = document.createElement('a')
  19.       link.download = 'merged-image.png'
  20.       link.href = canvas.toDataURL('image/png')
  21.       link.click()
  22.     }
  23.   }
  24. }
复制代码
结合使用实现二维码带logo

   使用qrcode生成二维码,使用canvas绘制合并到一起
  实现

html
  1. <canvas id="myCanvas" width="100" height="100" style="border: 1px solid #ccc"></canvas>
复制代码
js 
  1. const onMounted = async () => {
  2.   // await nextTick() // 使用vue加上
  3.   const canvas = document.getElementById('myCanvas')
  4.   canvas.width = 200
  5.   canvas.height = 200
  6.   const ctx = canvas.getContext('2d')
  7.   
  8.   // 生成二维码并绘制到canvas
  9.   const img1 = new Image()
  10.   img1.src = await QRCode.toDataURL('https://www.baidu.com/', { errorCorrectionLevel: 'H', width: 200, margin: 2 })
  11.   await new Promise((resolve, reject) => {
  12.     img1.onload = () => {
  13.       resolve(ctx.drawImage(img1, 0, 0))
  14.     }
  15.   })
  16.   // 绘制圆
  17.   // 设置圆的属性
  18.   const centerX = canvas.width / 2 // 圆心 X 坐标
  19.   const centerY = canvas.height / 2 // 圆心 Y 坐标
  20.   const radius = 30 // 圆的半径
  21.   ctx.beginPath() // 开始路径
  22.   ctx.arc(centerX, centerY, radius, 0, Math.PI * 2, false) // 绘制圆
  23.   ctx.fillStyle = '#f9f9f9' // 填充颜色
  24.   ctx.fill() // 填充圆
  25.   ctx.closePath() // 关闭路径
  26.   // 绘制文本
  27.   ctx.font = '10px'
  28.   ctx.fillStyle = 'blue'
  29.   ctx.textAlign = 'center'
  30.   ctx.textBaseline = 'middle'
  31.   ctx.fillText('绘制文本', canvas.width / 2, canvas.height / 2)
  32. }
复制代码
 结果


    如需把文本更换成图片,参考上面 合并图片方法 即可

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表