canvas教程

Canvas 很好的一个 Demo(2)

字号+ 作者:H5之家 来源:H5之家 2016-12-21 18:03 我要评论( )

图形已经绘制完毕了,我们就去看看如何绘制文字,首先我们的获取输入控件中输入的文字,然后我们需要使用 context 的 measureText() 测量文字的宽度,因为我们想让文字居中。 function drawText(canvas, context) {

图形已经绘制完毕了,我们就去看看如何绘制文字,首先我们的获取输入控件中输入的文字,然后我们需要使用 context 的 measureText() 测量文字的宽度,因为我们想让文字居中。

function drawText(canvas, context) { var selectObj = document.getElementById("foregroundColor"); var index = selectObj.selectedIndex; var fgColor = selectObj[index].value; var fontSize = "24"; context.fillStyle = fgColor; context.font = "bold " + fontSize + "px sans-serif"; context.textAlign = "left"; var message = document.getElementById("message").value; var messageWidth = context.measureText(message).width; var x = Math.floor(canvas.width / 2 - messageWidth / 2); var y = Math.floor(canvas.height / 2 - fontSize / 2); context.fillText(message, x, y); }

可以使用 context.font 设置文字相关的信息,第一个参数是 font style , 可以设置为 bold 或者 italic ,第二个参数是文字的大小,第三个参数是 font family ,这里我指定为 sans-serif 。

你可能还有疑问的是, context.textAlign 是什么玩意?这个就是设置 fillText() 中 x 坐标指定的是文本哪个部位的坐标,如果你设置为 center ,那么这个 x 就是文本中间的 x 坐标。当然我们这里设置为 left 就是文本最左边的 x 坐标。

那么问题来了,我们为什么还要使用 measureText() 这么费劲的测试文本的宽度使文本居中呢?的确如此,我们可以使用 textAlign 轻易的实现文本居中,下面是对上述函数的改写。

function drawText(canvas, context) { var selectObj = document.getElementById("foregroundColor"); var index = selectObj.selectedIndex; var fgColor = selectObj[index].value; var fontSize = "24"; context.fillStyle = fgColor; context.font = "bold " + fontSize + "px sans-serif"; context.textAlign = "center"; // change var x = Math.floor(canvas.width / 2); // change var y = Math.floor(canvas.height / 2 - fontSize / 2); var message = document.getElementById("message").value; context.fillText(message, x, y); }

文字也绘制完毕了,下面就绘制图形右下角的笑脸图片,当然这是个图片,不是一笔一笔画出来的。

function drawImage(canvas, context) { var smileImage = new Image(); smileImage.src = "smile.png"; smileImage.onload = function() { context.drawImage(smileImage, 632, 272, 24, 24); } }

drawImage() 的第二个参数是图形的左上角的 x 坐标,第三个参数是左上角的 y 坐标,第四个参数是图形的宽度,第五个参数是图形的高度。

这里为什么还是用一个 onload 呢?因为图片总是需要加载的,如果图片还没有加载完毕,就开始去绘制图片,肯定会绘制失败,所以我们利用一个回调,当图片加载完毕,再去绘制图片。

最后再来介绍一个目前浏览器支持不是很好的属性,我们可以将这个 Canvas 转化为一个图片,怎么样?听上去是不是很心动,其实写起来很容易。

function makeImage() { var canvas = document.getElementById("myCanvas"); canvas.onclick = function() { window.location = canvas.toDataURL("image/png"); } }

这个时候,如果你的浏览器支持的话,只要你点击一些画布,那么就会有一个图片版本弹出来,供你保存到本地。

我在我的电脑上做了测试,只有 Firefox 支持这个功能,我喜欢的 Google Chrome, Opera, Yandex 在这方面的支持还不尽如人意。

如果你想要项目的源码,你可以到 我的 Github 下载源码。

Ending…

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • canvas如何使用mvvm模式画图

    canvas如何使用mvvm模式画图

    2016-12-22 11:05

  • 第十一讲:canvas实例3

    第十一讲:canvas实例3

    2016-12-21 14:01

  • html5 canvas 核心编程

    html5 canvas 核心编程

    2016-12-21 14:00

  • Canvas 滚动条

    Canvas 滚动条

    2016-12-21 13:08

网友点评