【问题标题】:Node canvas use fallback font for unknown characters节点画布对未知字符使用后备字体
【发布时间】:2022-03-01 01:19:55
【问题描述】:

我正在使用 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”字体肯定可以正确显示字符,所以我认为它会自动回退到那个位置,但事实并非如此。 有没有办法自动使用后备字体?如果不是,我如何告诉它在哪些字符上使用它?

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这在我的 VPS 上有效,但由于某种原因在我的本地计算机上无效...知道可能导致这种情况的原因吗?我注意到很多与字体有关的奇怪行为,另一个错误是由于在本地安装了同名字体引起的......
  • 我建议检查您在两台机器上安装的 node-canvas 版本,并确保可以单独使用字体文件。如果本地安装的字体存在干扰,您可以尝试在注册时更改字体系列的名称,并改用该唯一名称。
  • 谢谢,我试试看!
猜你喜欢
  • 2015-12-07
  • 2017-08-18
  • 1970-01-01
  • 2020-03-08
  • 2019-12-26
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多