Skip to content

@napi-rs/canvas 字体加粗支持问题 #1129

@star-zwc

Description

@star-zwc

在使用 @napi-rs/canvas 进行 Canvas 绘图时,我发现无法通过数值权重设置字体的加粗效果。具体表现为:

   ctx.font = '200 24px sans-serif'; // 数值权重设置被忽略

fontVariationSettings 支持问题: 虽然文档显示支持可变字体,但实际使用中发现:

    // 类型错误: 类型"SKRSContext2D"上不存在属性"fontVariationSettings"
   ctx.fontVariationSettings = "'wght' 700";

通过这个设置也是没有效果的

我的代码

// 引入@napi-rs/canvas
const { Canvas, createCanvas, GlobalFonts } = require("@napi-rs/canvas");
const { join, resolve } = require("path");
const { writeFileSync } = require("fs");
const path = require("path");
let fontPath = path.join(__dirname, "fonts", "AlimamaFangYuanTiVF-Thin-2.ttf");
// let fontPath = path.join(__dirname, "fonts/02", "SITKAVF-ITALIC.TTF");
GlobalFonts.registerFromPath(fontPath, "Alimama FangYuanTi VF");

// 创建一个画布
const canvas = createCanvas(800, 600);
const ctx = canvas.getContext("2d");

// 画白色背景
ctx.fillStyle = "#ffffff";
ctx.fillRect(0, 0, 800, 600);
ctx.textAlign = "start";
ctx.fillStyle = "black";

ctx.font = "200 39px 'Alimama FangYuanTi VF'";
ctx.fontVariationSettings = "'wght' 200, 'wdth' 85";

// 绘制文本

ctx.fillText("Hello, world!", 10, 50);
//保存为图片
const b = canvas.toBuffer("image/png");

writeFileSync(join(__dirname, "draw-emoji.png"), b);

字体是可变字体,下图是字体的多个效果,

Image

绘制出来的只有字体默认的wght:700 的字体

Image

字体文件下载地址

https://www.iconfont.cn/fonts/detail?spm=a313x.fonts_index.i1.d9df05512.7f7b3a81GWZrEx&cnid=pOvFIr086ADR

<img width="1441" height="406" alt="Image" src="https://github.com/user-attachments/assets/8aae2950-7d01-4118-8d5f-b2757ceaf35f" />

环境信息

  • 操作系统: Windows 11

  • Node.js 版本:v20.18.0

  • @napi-rs/canvas 版本:"^0.1.80",

  • 测试字体: 阿里妈妈方圆体 VF,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions