文档详情

html5在canvas中插入图片.docx

发布:2017-12-09约2.68千字共4页下载文档
文本预览下载声明
在canvas中插入图片在canvas中显示图片非常简单。可以通过修正层为图片添加印章、拉伸图片或者修改图片等,并且图片通常会成为canvas上的焦点。用HTML5 Canvas API内置的几个简单命令可以轻松地为canvas添加图片内容。不过,图片增加了canvas操作的复杂度:必须等到图片完全加载后才能对其进行操作。 浏览器通常会在页面脚本执行的同时异步加载图片。如果试图在图片未完全加载之前就将其呈现到canvas上,那么canvas将不会显示任何图片。因此, 开发人员要特别注意,在呈现之前,应确保图片已经加载完毕。我们的示例将加载一张树皮纹理的图片作为树干以供canvas使用。为保证在呈现之前图片已完全加载,我们提供了回调,即仅当图像加载完成时才执行后续代码,如代码清单2-14所示。代码清单2-14 加载图像// 加载图片bark.jpg??var bark = new Image();? ?bark.src = bark.jpg;? ???// 图片加载完成后,将其显示在canvas上? ?bark.onload = function () {? ???drawTrails();? ?} 复制代码从上面的代码中可以看到,我们为bark.jpg图片添加了onload处理函数,以保证仅在图像加载完成时才调用主drawTrails函数。这样做可以保证后续的调用能够把图片正常显示出来,如代码清单2-15所示。代码清单2-15 在canvas上显示图像// 用背景图案填充作为树干的矩形??context.drawImage(bark, -5, -50, 10, 50); 复制代码在这段代码里,我们用纹理贴图替换了之前调用fillRect函数的填充来作为新的树 干。尽管替换的动作很小,但canvas上显示出来的树干更有质感。注意,在drawImage函数中,除了图片本身外,还指定了x、y、width和 height参数。这些参数会对贴图进行调整以适应预定的10×50像素树干区域。我们还可以把原图的尺寸传进来,以便在裁切区域内对图片进行更多控制。在图2-12中可以看到,同之前用矩形填充的方式相比,树干的变化不大。图2-12 使用了树干贴图的树2.2.10 渐变对树干还是不满意?其实我也是。我们使用另一种可以让树干变得稍微好看点的绘制方法:渐变。渐变是指在颜色集上使用逐步抽样算法,并将结果应用于描边样式和填充样式中。使用渐变需要三个步骤:(1) 创建渐变对象;(2) 为渐变对象设置颜色,指明过渡方式;(3) 在context上为填充样式或者描边样式设置渐变。可以将渐变看做是颜色沿着一条线进行缓慢地变化。例如,如果为渐变对象提供了A、B两个点,不论是绘制还是填充,只要从A移动到B,都会带来颜色的变化。要设置显示哪种颜色,在渐变对象上使用addColorStop函数即可。这个函数允许指定两个参数:颜色和偏移量。颜色参数是指开发人员希望在偏移位置描边或填充时所使用的颜色。偏移量是一个0.0到1.0之间的数值,代表沿着渐变线渐变的距离有多远。假如要建立一个从点(0,0)到点(0,100)的渐变,并指定在0.0偏移位置使用白色,在1.0偏移位置使用黑色。当使用绘制或者填充的动作从(0,0)画到(0,100)后,就可以看到颜色从白色(起始位置)渐渐转变成了黑色(终止位置)。除了可以变换成其他颜色外,还可以为颜色设置alpha值(例如透明),并且alpha值也是可以变化的。为了达到这样的效果,需要使用颜色值的另一种表示方法,例如内置alpha组件的CSS rgba函数。下面我们通过示例来详细了解如何使用两个渐变来填充(相应的函数为fillRect)矩形区域,并形成最终的树干,见代码清单2-16。代码清单2-16 使用渐变// 创建用作树干纹理的三阶水平渐变??var trunkGradient = context.createLinearGradient(-5, -50, 5, -50);? ???// 树干的左侧边缘是一般程度的棕色? ?trunkGradient.addColorStop(0, #663300);? ???// 树干中间偏左的位置颜色要淡一些? ?trunkGradient.addColorStop(0.4, #996600);? ???// 树干右侧边缘的颜色要深一些? ?trunkGradient.addColorStop(1, #552200);? ???// 使用渐变色填充树干? ?context.fillStyle = trunkGradient;? ?context.fillRect(-5, -50, 10, 50);? ???// 接下来,创建垂直渐变,以用作树冠在树干上投影? ?var canopyShadow
显示全部
相似文档