问题描述
对于Canvas和自定义字体遇到的这个问题,我已经花了一段时间了。
我正在使用web font loader从google加载我的网络字体,但是在第一次和第二次重绘之间某些字形仍然发生变化。重绘功能可以在任何时间发生,在本示例中,它是由按钮触发的,但是第一次看上去总是与第二次不同。
鉴于上述前提,我认为这不是一个加载问题。我认为这是由于字体文件中缺少字符而造成的。 由于性能原因,浏览器第一次抛出随机字体,并启动异步后备字体查询。可以吗?
这里是minimal reproducible example:请确保没有使用任何缓存:
WebFont.load({
classes: false,google: {
families: [
"Open Sans"
]
},active: () => {
(document.querySelector("button") as HTMLButtonElement).addEventListener("click",() => {
refresh();
});
}
});
function refresh() {
let canvas = document.querySelector("#canvas") as HTMLCanvasElement;
let ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
ctx.fillStyle = "black";
ctx.fillRect(0,canvas.width,canvas.height);
ctx.font = "12pt Open Sans";
ctx.fillStyle = "white";
let step = 20;
let charset = "ªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■□";
for (let x = 0,y = 0,i = 0; i < charset.length; x += step,i++) {
if (x + step > canvas.width) {
x = 0;
y += step;
}
ctx.fillText(textStyle(charset.charat(i)),x + step / 2,y + step / 2);
}
}
function textStyle(s: string): string {
return s.replace(/./g,"$&\uFE0E");
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)