我需要使用自定义字体并将其呈现在屏幕外的画布上,虽然我已经做到了,但是我无法设置字体呈现的大小-结果只能是很小的呈现。

我见过的所有资源,包括w3schools.com,developer.mozilla.org等,都天真地假设我们都使用系统字体,并以草的方式定义大小,并与字体名称混合为:ctx.font =“ 30px Arial”;

事实是,̶如果我使用这个名字我自定义的字体文件放在同一个文件夹̶(̶“̶c̶u̶s̶t̶o̶m̶.̶w̶o̶f̶f̶”̶)̶̶(或.otf)的̶它的工作原理,̶但如果我添加大小以像素或点(“ 30px custom.woff”)无效!

令人沮丧的是,其他参数(如字体粗细)似乎是单独定义的(谈论令人难以置信的HTML5不一致使人想起过去)。因此,是否有办法更改用JS创建的屏幕外画布的自定义字体的呈现大小?

我这样创建屏幕外画布:

var offScreenCanvas = document.createElement('canvas');
offScreenCanvas.width = 256;
offScreenCanvas.height = 256;
var ctx = offScreenCanvas.getContext("2d");


稍后,我将字体渲染如下:

ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.font = 'custom.woff';
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, offScreenCanvas.width, 256);

ctx.fillStyle = 'black';
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillText(txt, offScreenCanvas.width / 2, offScreenCanvas.height / 2);


然后,我对该渲染进行纹理处理,并在three.js表面上使用它。

three.js r96.0

jsfiddle上的字体替换(请参阅评论):
javascript - 如何在three.js中将自定义字体渲染的大小设置为屏幕外 Canvas ?-LMLPHP

最佳答案

您可以创建CSS字体规则并根据需要命名。然后,您可以使用自己的名字。

<style>
@font-face {
    font-family: 'myfontname';
    src: url('custom.woff');
}
</style>


然后在您的脚本中

ctx.font = '30px myfontname';




如果您说的那样可以与传递字体文件一起使用,请尝试

ctx.font = "fontfile.woff";
// most likely you need to wait/check that the font has loaded first and then
ctx.font = ctx.font.replace('(\d+)px', "20px");

07-24 18:57
查看更多