Javascript:使用canvas画二维码矩阵

矩阵是由0和1组成的数组。

0-白色

1-黑色

javascript 复制代码
/**
 * 
 * @param matrix Array
 * @param size Int
 * @param padding Int
 * @param transparentBackground Boolean
 * @returns {string}
 */
function createQRCodeCanvas(matrix, size, padding, transparentBackground) {
  size = size || 3
  padding = padding === undefined ? 3 : padding
  const width = Math.sqrt(matrix.length)
  const canvasWith = width * size + padding * 2

  const canvas = document.createElement('canvas')
  canvas.width = canvasWith
  canvas.height = canvasWith

  const ctx = canvas.getContext('2d')
  if(!transparentBackground) {
    ctx.fillStyle = 'rgb(255,255,255)'
    ctx.fillRect(0, 0, canvasWith, canvasWith)
  }
  ctx.fillStyle = 'rgb(0,0,0)'

  for (let y = 0; y < width; y++) {
    for (let x = 0; x < width; x++) {
      const point = y * width + x
      if (matrix[point] === 1) {
        ctx.fillRect(padding + x * size, padding + y * size, size, size)
      }
    }
  }
  return canvas.toDataURL()
}
相关推荐
全栈老石10 分钟前
手写一个无限画布 #3:如何在Canvas 层上建立事件体系
前端·javascript·canvas
csdn飘逸飘逸23 分钟前
Autojs基础-device(设备)
javascript
csdn飘逸飘逸24 分钟前
Autojs基础-文件系统(files)
javascript
wuhen_n25 分钟前
patch算法:新旧节点的比对与更新
前端·javascript·vue.js
十里八乡有名的后俊生27 分钟前
深度解析:JavaScript中的import方式 - 静态导入、动态导入与CSS处理机制
前端·javascript·面试
用户606487671889629 分钟前
Claude Sonnet 4.6 实战测评:代码生成、推理能力、长文本处理全面拆解
javascript
wuhen_n30 分钟前
Diff算法基础:同层比较与key的作用
前端·javascript·vue.js
颜酱36 分钟前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
Qinana1 小时前
手搓 AI Agent:从零构建能自动写代码、跑命令的“数字员工”
前端·javascript·agent
YukiMori231 小时前
深入理解 JavaScript 箭头函数的 this:为什么 DOM 事件不推荐用箭头函数?
前端·javascript·dom