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()
}
相关推荐
得物技术3 分钟前
Java SPI 机制初探|得物技术
javascript
kngines5 分钟前
【Node.js从 0 到 1:入门实战与项目驱动】1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)
开发语言·javascript·node.js
一个很帅的帅哥8 分钟前
Node.js和Javascript中的async和await
javascript·node.js·async·promise·await
生活不易,被迫卖艺44 分钟前
Redux与React-环境准备(React快速上手1)
前端·javascript·react.js
天天扭码1 小时前
很全面的前端面试题——手写题(上)
前端·javascript·面试
程序员小寒1 小时前
前端遇到页面卡顿问题,如何排查和解决?
前端·javascript·性能优化
正义的大古2 小时前
OpenLayers 详细开发指南 - 第八部分 - GeoJSON 转换与处理工具
开发语言·前端·javascript
kngines2 小时前
【Node.js从 0 到 1:入门实战与项目驱动】1.2 Node.js 的核心优势(非阻塞 I/O、事件驱动、单线程模型)
开发语言·javascript·node.js
白仑色3 小时前
AJAX表单验证项目实战:实时用户名检查
前端·javascript·ajax·表单验证·py
卸载引擎3 小时前
【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
前端·javascript·electron