在Node.js中将Path2D绘制到画布上并不会渲染出任何内容

后端开发 2026-07-11

我正在编写代码,在Node.js中将FontAwesome的 SVG路径渲染到画布上,并将结果本地保存为PNG。

在此过程中我创建了Path2D对象并对其进行填充,但没有绘制出任何东西。为了尝试调试问题,我用Path2D绘制了一个矩形,如下所示:

import * as fs from 'fs';
import { createCanvas } from 'canvas';
import { Path2D } from "path2d";

const canvas = createCanvas(48, 48);  
const ctx = canvas.getContext('2d');  

ctx.fillStyle = "#222222";  
ctx.fillRect(0, 0, 48, 48);  

ctx.fillStyle = "#ce2e2e";  
ctx.fillRect(0,0,16,16);  

let region = new Path2D();  
region.rect(24,24,16,16);
ctx.fillStyle = "#29ea1c";  
ctx.fill(region);

fs.writeFileSync('test.png', canvas.toBuffer('image/png'))

我得到的输出是一个48x48的位图被填充为深灰色,并在左上角有一个红色矩形,这是来自两个fillRect调用的结果。

然而我还期望在中间看到一个绿色矩形,但却没有出现。我到底在做错什么?

在此输入图片描述

我在Windows 11上,使用Node.js v24.14.0,并配有 [email protected][email protected]

解决方案

我不清楚为什么这一步是必要的/会起作用,但我已经找到了让我的代码起作用的方法,就是在代码开头添加以下几行:

import { createCanvas, CanvasRenderingContext2D } from "canvas";
import { Path2D, applyPath2DToCanvasRenderingContext } from"path2d";

applyPath2DToCanvasRenderingContext(CanvasRenderingContext2D);

这样我就得到了绿色矩形。

在此输入图片描述

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章