我只能说,生成的文件会有点大。
用开发者工具选中 canvas 元素然后运行下面的代码
d = $0.getContext('2d')
rects = Array(2000).fill(0).flatMap((_, rowIndex) => Array(2000).fill(0).map((_, columnIndex) => {
const rgb = d.getImageData(rowIndex,columnIndex,1,1).data.slice(0, 3)
const rect = `<rect x="${rowIndex}" y="${columnIndex}" width="1" height="1" fill="rgb(${rgb[0]},${rgb[1]},${rgb[2]})" />`
return rect
})).join('\n')
svg = `<svg width="2000" height="2000" viewBox="0 0 2000 2000" xmlns="
http://www.w3.org/2000/svg">
${rects}
</svg>`
console.log(svg)
生成的 svg 大小是 261MB 。这个 svgchrome 打开不到一般,tab 内存占用飙到 6G 后页面崩溃了。
相对于直接导出成 png ,文件大小是 2.5M 。使用更高压缩比例可以压到 950KB 。