将html内容绘制到canvas的思路

83 阅读1分钟
  • 创建一个canvas元素
  • 创建svg文件,使用Blob构造函数
  • 将svg中的值填充到foreignObject,然后再foreignObject中填充想要复制的节点的html
  • 创建image标签,将image.src = URL.createObjectURL(svg)
  • 在image读取完毕后,调用canvas的drawImage方法,将图片绘制到画布上。
const data = 
`
<svg xmlns="http://www.w3.org/2000/svg" width="400px" height="400px">
    <foreignObject width="100%" height="100%">
        <div xmlns="http://www.w3.org/1999/xhtml">
            ${elemeny.innerHTML}
        </div>
     </foreignObject>
</svg>
`

const svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"})
const url = URL.createObjectURL(svg)
const image = new Image()
image.src = url
image.addEventListener("load", () => {
    const ctx = canvas.getContext('2d')
    ctx.drawImage(image, 0, 0)
})