节点 canvas 对未知字符使用后备字体

Node canvas use fallback font for unknown characters

我正在使用 Node-Canvas 在图像上打印文本,并试图弄清楚如何确保正确显示奇怪的字符,即使主字体无法显示它们也是如此。

根据我在网上找到的内容,您必须将 registerFont 可以 显示这些字符的字体一起使用,但它似乎没有自动使用它,我找不到任何关于如何告诉它使用后备字体的信息。

注册了能显示汉字(Code2000)的字体后还是这样(“ᗩ”字显示不正确):

(正在尝试打印 HELLO WORLD, I'M ᗩcł!
这是我的代码:

//load some fallback fonts for custom characters (arial & code2000 in this case)
canvas.registerFont('./Assets/Fonts/arial.ttf', {family: 'Arial'})
canvas.registerFont('./Assets/Fonts/code2000.ttf', {family: 'Code2000'})
//load the Uni Sans Heavy custom font
canvas.registerFont('./Assets/Fonts/Uni_Sans_Heavy.ttf', {family: 'Uni Sans'})
let cnvs = canvas.createCanvas(740, 260)
let ctx = cnvs.getContext('2d')
ctx.fillStyle = "#fff"
ctx.font = '50px Uni Sans'
ctx.fillText(`HELLO WORLD, I'M ᗩcł!`, 50, 100);
    
message.channel.send({files: [{ attachment: cnvs.toBuffer() }]}).catch(allerrors)

“Code2000”字体确实可以正确显示字符,所以我认为它会自动回退到那个,但事实并非如此。 有没有办法自动使用后备字体?如果不是,我如何告诉它在哪些字符上使用它?

您只需要在设置字体时指定'Code2000'。以逗号分隔的连续字体用作后备字体。

ctx.font = '50px Uni Sans, Code2000'

我自己测试过,效果很好。