javascript - Node Canvas 对未知字符使用后备字体

标签 javascript node.js discord.js node-canvas

我正在使用 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'
我自己对此进行了测试,并且效果很好。

关于javascript - Node Canvas 对未知字符使用后备字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71133067/

相关文章:

javascript - AngularJs 模板不从 $templateCache 加载

javascript - 在浏览器调整大小之前,Thinglink 图像不可见

javascript - 如果不存在则申请类(class)

angularjs - NodeJS中,将数据库查询输出转换为Json格式

javascript - 如何让机器人对自己的消息使用react?

javascript - 使用进度条添加短信

javascript - 我如何使用 Node.js 检查 ram 的当前使用情况? (Discord.js 机器人)

node.js - 如何在 Mongoose 中创建和使用枚举

javascript - Discord.js 列出我所有的机器人命令

javascript - 如何让 react 达到一定量后消失?