canvas动态加载第三方字体

最近在改canvas模拟播放视频,其中有在视频中插入文字的需求,通过canvas绘制文字发现,字体的加载方式和正常加载字体有些不同。

 

一般字体加载,用 css 的 @font-face 即可,比如

@font-face
{
font-family: myFirstFont;
src: url('Sansation_Light.ttf'),
     url('Sansation_Light.eot'); /* IE9 */
}

在字体加载完毕后会自动替换元素中的内容,但使用 canvas 绘制文字的时候,如果绘制当前时刻并没有加载完成对应字体,绘制结果就会失败。

因此,使用 canvas 绘制文字的话,需要提前加载字体。在查询相关资料后,发现 document.fonts API可以实现需求,不足的是,IE并不支持。在此记录下使用方法。

// 浏览器是否支持
if (!document.fonts) {
  alert('抱歉,当前浏览器兼容性较差,会影响操作体验,请更换最新版谷歌浏览器进行操作');
}

// 检验字体是否已经安装
if (document.fonts.check(`16px ${name}`, '上')) {
    return Promise.resolve(true);
}

// 加载字体
const fontface = new FontFace(name, `url(xxx)`);
document.fonts.add(fontface);
fontface.load();

fontface.loaded.then(() => {
    // 字体加载完毕,可使用
}).catch(err => {
    // 字体加载失败
});

参考:

posted on 2020-04-13 00:14  StephenWong  阅读(2151)  评论(0编辑  收藏  举报