iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在html5中使用canvas绘制网络字体
  • 766
分享到

怎么在html5中使用canvas绘制网络字体

2023-06-09 12:06:52 766人浏览 安东尼
摘要

怎么在HTML5中使用canvas绘制网络字体?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。服务端转换 服务端转换是什么意思呢?直接把内容和需要的字体传递给服务端,服

怎么在HTML5中使用canvas绘制网络字体?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

服务端转换
 

服务端转换是什么意思呢?直接把内容和需要的字体传递给服务端,服务端提供一个文字转图片的接口,将字体转换成图片,然后在canvas中直接绘制图片,这样就能保证绘制网络字体不会有问题,不会有任何的兼容性问题,但是这样做也就意味着服务端的工作会变多,同时如果文字内容是可以被用户编辑修改的,那就意味着用户每操作一次,都要请求一次接口,然后重新绘制一次图片,这样会导致网络开销增加,如果不想要服务端的介入,那就看看下面的解决方案

webfontloader
 

WEBfontloader是一个由Google和Typekit共同开发的组件库,提供了一组标准事件监听字体的加载,虽然已经很长时间没有更新了,但是对字体加载的监听确实有效,下面来看一个具体的例子怎么使用:

var WebFont = require('webfontloader')var canvas = document.getElementById('canvas')var ctx = canvas.getContext('2d')var link = document.createElement('link')link.rel = 'stylesheet'link.type = 'text/CSS'link.href = 'Http://fonts.googleapis.com/css?family=Vast+Shadow'document.getElementsByTagName('head')[0].appendChild(link)WebFont.load({  custom: {    families: ['Vast Shadow']  },  active: function () {    ctx.font = '50px "Vast Shadow"'    ctx.textBaseline = 'top'    ctx.fillText('123', 20, 10)  }})

首先通过require引入webfontloader,并且动态插入一个script标签载入google的字体,然后调用webfontloader的load方法进行配置监听,当字体加载完成后就会触发active钩子,开始绘制对应字体的内容,webfontloader提供了一个完整的事件系统钩子给开发者调用:

怎么在html5中使用canvas绘制网络字体 

如果想要了解webfontloader的更多用法可以前往 GitHub 查看学习,如果你觉得为了绘制网络字体需要引入一个js库有点得不偿失,没关系,接下来向你接受不用库的方法

document.fonts.load
 

如果你在Google上搜索canvas加载网络字体,你一定能搜到下面这个方案:

var canvas = document.getElementById('canvas')var ctx = canvas.getContext('2d')var link = document.createElement('link')link.rel = 'stylesheet'link.type = 'text/css'link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow'document.getElementsByTagName('head')[0].appendChild(link)var image = document.createElement('img')image.src = link.hrefimage.onerror = () => {  ctx.font = '50px "Vast Shadow"'  ctx.textBaseline = 'top'  ctx.fillText('123', 20, 10)}

这个方案存在一点问题,当image onerror事件触发的时候,并不能保证字体已经加载完成,只能保证css文件已经加载完成,因此,在第一次访问的时候并不会生效:

怎么在html5中使用canvas绘制网络字体 

但是你再刷新一下浏览器之后字体就生效了:

怎么在html5中使用canvas绘制网络字体 

这是什么原因呢?我们来看一下刷新浏览器的网络请求:

怎么在html5中使用canvas绘制网络字体 
 

可以看到后面的字体走的是缓存,因此可以字体可以绘制出来,但是如果将chrome调试的Disable cache勾选上,将缓存禁用掉,那么无论怎么刷新,字体都不会绘制出来。

怎么在html5中使用canvas绘制网络字体 

有解决办法吗?答案是有的,使用Font Load API进行加载,来看具体代码:

var canvas = document.getElementById('canvas')var ctx = canvas.getContext('2d')var link = document.createElement('link')link.rel = 'stylesheet'link.type = 'text/css'link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow'document.getElementsByTagName('head')[0].appendChild(link)var image = document.createElement('img')image.src = link.hrefimage.onerror = () => {  document.fonts.load('50px Vast Shadow', '123').then(() => {    ctx.font = '50px "Vast Shadow"'    ctx.textBaseline = 'top'    ctx.fillText('123', 20, 10)  })}

先用image的onerror事件trick css文件的加载,然后调用document.fonts.load看字体是否加载完成,这样就可以准确监听到字体加载完成,但是这个api存在兼容性问题,来看具体表格:

怎么在html5中使用canvas绘制网络字体 

想要对这个api了解更多,可以前往 mdn 查看

对比绘制

对比绘制是什么意思呢?就是先设置一个没有的字体,然后在设置我们需要的字体进行对比,来看具体代码:

var canvas = document.getElementById('canvas')var ctx = canvas.getContext('2d')var link = document.createElement('link')link.rel = 'stylesheet'link.type = 'text/css'link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow'document.getElementsByTagName('head')[0].appendChild(link)ctx.font = '50px UNKNOW'ctx.textBaseline = 'top'ctx.fillText('123', 20, 10)var dataDefault = ctx.getImageData(20, 10, 50, 50).datactx.clearRect(20, 10, 100, 100)var detect = () => {  ctx.font = '50px "Vast Shadow"'  ctx.textBaseline = 'top'  ctx.fillText('123', 20, 10)  var dataNow = ctx.getImageData(20, 10, 50, 50).data  if ([].slice.call(dataNow).join('') === [].slice.call(dataDefault).join('')) {    ctx.clearRect(20, 10, 100, 100)    requestAnimationFrame(detect)  }}detect()

看完上述内容,你们掌握怎么在html5中使用canvas绘制网络字体的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在html5中使用canvas绘制网络字体

本文链接: https://www.lsjlt.com/news/255992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在html5中使用canvas绘制网络字体
    怎么在html5中使用canvas绘制网络字体?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。服务端转换 服务端转换是什么意思呢?直接把内容和需要的字体传递给服务端,服...
    99+
    2023-06-09
  • 使用canvas怎么绘制网络字体
    使用canvas怎么绘制网络字体?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。服务端转换服务端转换是什么意思呢?直接把内容和需要的字体传递给服务端,服务端提供一...
    99+
    2023-06-09
  • html5中怎么使用canvas绘制文字特效
    这篇文章主要介绍“html5中怎么使用canvas绘制文字特效”,在日常操作中,相信很多人在html5中怎么使用canvas绘制文字特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • HTML5怎么在canvas中绘制文本
    这篇文章主要介绍“HTML5怎么在canvas中绘制文本”,在日常操作中,相信很多人在HTML5怎么在canvas中绘制文本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HT...
    99+
    2022-10-19
  • html5中​怎么使用Canvas绘制直线
    这篇文章主要介绍“html5中怎么使用Canvas绘制直线”,在日常操作中,相信很多人在html5中怎么使用Canvas绘制直线问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • HTML5中怎么用canvas绘制曲线
    本文小编为大家详细介绍“HTML5中怎么用canvas绘制曲线”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5中怎么用canvas绘制曲线”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2022-10-19
  • html5中怎么用Canvas绘制椭圆
    本篇内容主要讲解“html5中怎么用Canvas绘制椭圆”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html5中怎么用Canvas绘制椭圆”吧! 概述 H...
    99+
    2022-10-19
  • HTML5中怎么用canvas绘制线条
    本篇内容介绍了“HTML5中怎么用canvas绘制线条”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &...
    99+
    2022-10-19
  • 怎么使用HTML5的Canvas绘制曲线
    今天小编给大家分享一下怎么使用HTML5的Canvas绘制曲线的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2022-10-19
  • 怎么在html5中使用canvas绘制文本自动换行
    怎么在html5中使用canvas绘制文本自动换行?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一个150*100的canvas画布,加个边框明显边界<canvas&nb...
    99+
    2023-06-09
  • 怎么在html5中利用canvas绘制一个圆环
    今天就跟大家聊聊有关怎么在html5中利用canvas绘制一个圆环,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现过程:首先:html部分代码如下:<canvas ...
    99+
    2023-06-09
  • html5中怎么利用Canvas绘制椭圆
    html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 概述 HTML5中的C...
    99+
    2022-10-19
  • 怎么在html5中利用Canvas绘图
    怎么在html5中利用Canvas绘图?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、什么是CanvasCanvas 是H5的一部分,允许脚本语言动态渲染图像。Canva...
    99+
    2023-06-09
  • html5怎么使用canvas绘制一张图片
    本篇内容主要讲解“html5怎么使用canvas绘制一张图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html5怎么使用canvas绘制一张图片”吧!<...
    99+
    2022-10-19
  • 怎么在HTML5中利用Canvas绘制一个K线图
    本篇文章为大家展示了怎么在HTML5中利用Canvas绘制一个K线图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SVG 是一种使用 XML 描述 2D 图形的语言。 Canvas 通过 JavaS...
    99+
    2023-06-09
  • HTML5中怎么用Canvas绘制各种线条
    本篇内容介绍了“HTML5中怎么用Canvas绘制各种线条”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • HTML5中怎么用Canvas绘制圆点虚线
    本篇内容主要讲解“HTML5中怎么用Canvas绘制圆点虚线”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么用Canvas绘制圆点虚线”吧! 代...
    99+
    2022-10-19
  • HTML5怎么在canvas中绘制矩形附效果图
    这篇文章主要讲解了“HTML5怎么在canvas中绘制矩形附效果图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5怎么在canvas中绘制矩形附效果...
    99+
    2022-10-19
  • 怎么在HTML5中利用canvas绘制哆啦A梦头部
    怎么在HTML5中利用canvas绘制哆啦A梦头部?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。效果如下:代码如下:<div class="dorae...
    99+
    2023-06-15
  • 怎么使用javascrip和HTML5 Canvas绘制转盘抽奖
    本文小编为大家详细介绍“怎么使用javascrip和HTML5 Canvas绘制转盘抽奖”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用javascrip和HTML5 Canvas绘制转盘抽奖”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作