Aci*_*bus 6 javascript node.js node-canvas discord.js
我正在使用 Node-Canvas 在图像上打印文本,并试图弄清楚如何确保奇怪的字符正确显示,即使主要字体无法显示它们。
\n从我在网上找到的内容来看,你必须使用registerFont一种可以显示这些字符的字体来依靠,但它似乎不会自动使用它,而且我找不到任何关于如何告诉它确实使用的内容后备字体。
当注册可以显示字符(Code2000)的字体时,它仍然显示为这样(“\xe1\x97\xa9”字符未正确显示):
\n\n(尝试打印HELLO WORLD, I\'M \xe1\x97\xa9c\xc5\x82!)
\n这是我的代码:
//load some fallback fonts for custom characters (arial & code2000 in this case)\ncanvas.registerFont(\'./Assets/Fonts/arial.ttf\', {family: \'Arial\'})\ncanvas.registerFont(\'./Assets/Fonts/code2000.ttf\', {family: \'Code2000\'})\n//load the Uni Sans Heavy custom font\ncanvas.registerFont(\'./Assets/Fonts/Uni_Sans_Heavy.ttf\', {family: \'Uni Sans\'})\nlet cnvs = canvas.createCanvas(740, 260)\nlet ctx = cnvs.getContext(\'2d\')\nctx.fillStyle = "#fff"\nctx.font = \'50px Uni Sans\'\nctx.fillText(`HELLO WORLD, I\'M \xe1\x97\xa9c\xc5\x82!`, 50, 100);\n \nmessage.channel.send({files: [{ attachment: cnvs.toBuffer() }]}).catch(allerrors)\nRun Code Online (Sandbox Code Playgroud)\n“Code2000”字体肯定可以正确显示字符,所以我认为它会自动回退到该字符,但事实并非如此。\n有没有办法自动使用回退字体?如果没有,我如何告诉它在哪些字符上使用它?
\n小智 3
您只需在设置字体时指定“Code2000”即可。用逗号分隔的连续字体用作后备字体。
ctx.font = '50px Uni Sans, Code2000'
Run Code Online (Sandbox Code Playgroud)
我自己对此进行了测试,效果非常好。