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 => {
    // 字體加載失敗
});

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM