canvas动态加载第三方字体
时间:2020-04-13 09:51:56
收藏:0
阅读:152
最近在改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 => {
// 字体加载失败
});
参考:
- Mozilla介绍: https://developer.mozilla.org/zh-CN/docs/Web/API/Document/fonts
- css-font-loading; https://lists.w3.org/Archives/Public/www-style/2015May/0002.html
- demo: https://codepen.io/matuzo/pen/jrzyYA?editors=1111
- https://stackoverflow.com/questions/1330825/preloading-font-face-fonts
原文:https://www.cnblogs.com/itstring/p/11213484.html
评论(0)