2.1 Canvas 概述
Canvas本质上是一个位图画布,其上绘制的图形是不可缩放的,不能像SVG图像那样可以被放大缩小。此外,用Canvas绘制出来的对象不属于页面DOM结构或者任何命名空间。
使用canvas编程,首先要获取其上下文(context)。接着在上下文中执行动作,最后将这些动作应用到上下文中。
canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸。左上角坐标为x=0,y-0的点称作原点。
同大多数HTML元素一样,canvas元素也可以通过应用CSS的方式来增加边框,设置内边距、外边距等,而且一些CSS属性还可以被canvas内的元素继承。
2.2 使用HTML5 Canvas API
修正——在绘制系统中的说法是变换——在应用的时候可以被顺序应用、组合或者随意修改。每个绘制操作的结果显示在canvas上之前都要经过修正层去做修正。虽然这么做增加了额外的复杂性,但却为绘制系统添加了更为强大的功能,可能像目前主流图像编辑工具那样支持实时图像处理,所以API中这部分内容的复杂性是必要的。
关于可重用代码有一条重要的建议:一般绘制都应从原点(坐标系的0,0点)开始,应用变换(缩放、平移、旋转等),然后不断修改代码直至达到希望的效果。
context路径函数
(1)moveTo(x,y):不绘制,只是将当前位置移动到新的目的坐标(x,y);
(2)lineTo(x,y):不仅将当前位置移动到新的目标坐标(x,y),而且在两个坐标之间画一条直线。
(3)closePath():这个函数的行为同lineTo很像,唯一的差别在于closePaht会将路径的起始坐标自动作为目标坐标。closePath还会通知canvas当前绘制的图形已经闭合或者形成了完全封闭的区域,这对将来的填充和描边都非常有用。
(4)strokeRect():基于给出的位置和坐标画出矩形的轮廓。
(5)clearRect():清除矩形区域内所有内容并将它恢复到初始状态,即透明色。
(6)quadraticCurveTo():函数绘制曲线的起点是当前坐标,带有两组(x,y)边。第二组是指曲线的终点。第一组代表控制点(control point)。所谓的控制点位于曲线的旁边(不是曲线之上),其作用相当于对曲线产生一个拉力。通过调整控制点的位置,就可以改变曲线的曲率。
图片增加了canvas操作的复杂度:必须等到图片完全加载后才能对其进行操作。浏览器通常会在页面脚本执行的同时异步加载图片。如果视图在图片未完全加载之前就将其呈现到canvas上,那么canvas将不会显示任何图片。
渐变是指在颜色集上使用逐步抽样算法,并将结果应用于描边样式和填充样式中。
使用渐变需要三个步骤:
(1)创建渐变对象;
(2)为渐变对象设置颜色,指明过渡方式;
(3)在context上为填充样式或者描边样式设置渐变。
要设置显示哪种颜色,在渐变对象上使用addColorStop函数即可。这个函数允许指定两个参数:颜色和偏移量。颜色参数是指开发人员希望在偏移位置描边或填充时所使用的颜色。偏移量是一个0.0到1.0之间的数值,代表沿着渐变线渐变的距离有多远。
除了线性渐变以外,HTML5 Canvas API 还支持放射性渐变,所谓放射性渐变就是颜色会介于两个指定圆间的锥形区域平滑变化。放射性渐变和线性渐变使用的颜色终止点是一样的。
createRadialGradient(x0,y0,r0,x1,y1,r1)
代码中,前三个参数代表以(x0,y0)为圆心,r0为半径的圆,后三个参数代表以(x1,y1)为圆心,r1为半径的另一个圆。渐变会在两个圆中间的区域出现。
scala函数带有两个参数来分别代表在x、y两个维度的值。每个参数在canvas显示图像的时候,向其床底在本方向轴上图像要放大(或者缩小)的量。
要在原点执行图形和路径的变换操作,执行完后再统一平移。理由就是缩放(scale)和旋转(rotate)等变换操作都是针对原点进行的。
如果对一个不在原点的图形进行旋转变换,那么rotate变换函数会将图形绕着原点旋转而不是在原地旋转。
注意,剪裁过的“阴影”树会先被显示出来,这样一来,真正的树就会按照Z轴顺序(canvas中对象的重叠顺序)显示在阴影的上面。此外,树影的填充用到了CSS的RGBA特性,通过特性我们将透明度值设置为正常情况下的20%。
操作canvas文本的方式与操作其他路径对象的方式相同:可以描绘文本轮廓和填充文本内部;同事,所有能够应用于其他图形的变换和样式都能用于文本。
context对象的文本绘制功能由两个函数组成:
(1)fillText(text,x,y,maxwidth)
(2)strokeText(text,x,y,maxwidth)
两个函数的参数完全相同,必选参数包括文本参数以及用于指定文本位置的坐标参数。maxwidth是可选参数,用于限制字体大小,它会将文本字体强制收缩到指定尺寸。此外,还有一个measureText函数可供使用,该函数会返回一个度量对象,其中包含了在当前context环境下指定文本的实际显示宽度。
文本呈现相关的context属性
属性
|
值
|
备 注
|
font
|
CSS 字体字符串
|
例如:italic Arial,scan-serif
|
textAlign
|
start、end、left、right、center
|
默认是start
|
textBaseline
|
top、hanging、middle、alphabetic、ideographic、bottom
|
默认是alphabetic
|
阴影属性
属性
|
值
|
备注
|
shadowColor
|
任何CSS中的颜色值
|
可以使用透明度(alpha)
|
shadowOffsetX
|
像素值
|
值为正数,向右移动阴影;值为负数,向左移动阴影
|
shadowOffsetY
|
像素值
|
值为正数,向下移动阴影;值为负数,向上移动阴影
|
shadowBlur
|
高斯模糊值
|
值越大,阴影边缘越模糊
|
Canvas API最有用的特性之一是允许开发人员直接访问canvas底层的像素数据。
(1)context.getImageData(sx,sy,sw,sh)。这个函数返回当前canvas状态并以数值数值的方式显示。具体来说,返回的对象包括三个属性。
width:每行有多少个像素。
height:每列有多少个像素。
data:一维数组,存有从canvans获取的每个像素的RGBA值。该数组为每个像素保存四个值——红、绿、蓝和alpha透明度。每个值都在0到255之间。因此,canvas上的每个像素在这个数组中就变成了四个整数值。数组的填充顺序是从左到右,从上到下。
getImageData函数有四个参数,该函数只返回这四个参数所限定的区域内的数据。只有被x、y、width、height四个参数框定的矩形区域内的canvas上的像素才会被取到。
在给定了width和height的canvas上,在坐标(x,y)上的像素的构成如下。
红色部分:((width*y)+x)*4
绿色部分:((width*y)+x)*4+1
蓝色部分:((width*y)+x)*4+2
透明度部分:((width*y)+x)*4+3
(2)context.putImageData(imagedata,dx,dy) 该函数允许开发人员传入一组图像数据,其格式与最初从canvas上获取来的是一样的。
(3)context.createImageData(sw,sh) 这个函数可以创建一组图像数据并绑定在canvas对象上。
如果canvas中的图片并发来自包含它的页面所在的域,页面脚本将不能取得其中的数据。
分享到:
相关推荐
在这个“HTML5 Canvas画印章”的主题中,我们将深入探讨如何利用Canvas API来创建一个逼真的电子印章。 Canvas API是HTML5的一个核心特性,它通过JavaScript提供了一组用于在网页上绘制2D图形的函数。这些函数包括...
在本章中,我们将深入探讨HTML5中的Canvas API,特别是如何使用它来绘制文字。Canvas是HTML5的一个重要组成部分,它提供了一个二维图形绘制接口,允许开发者动态地创建和修改图像。通过JavaScript与Canvas的结合,...
接下来的七章为第二部分,介绍了如何利用Canvas API实现动画和动画精灵、创建物理模拟、碰撞检测以及开发视频游戏等。最后,书中还包括了实现自定义控件如进度条、滑块、图像平移等的内容,并提供了如何创建基于...
本书第二章“Foundation JavaScript”详细介绍了JavaScript的基础知识,包括变量、数据类型、函数、对象和事件处理,这些都是操控Canvas所必需的技能。通过JavaScript,开发者可以响应用户输入,实时更新Canvas中的...
第2章 Canvas API 第3章 音频和视频 第4章 GELOLCATION API 第5章 Communication API 第6章 WebSockets API 第7章 Forms API 第8章 Web Workers API 第9章 Web Storage API 第10章 构建离线Web应用 第11章 ...
Canvas是HTML5引入的一种强大的绘图API,允许开发者使用JavaScript进行像素级别的图形绘制。 5.1 Canvas基础 1. HTML5的canvas标记:Canvas是一个HTML标签,用于在网页上创建一个可绘制的二维图形区域。它需要定义...
第二部分 基础知识篇 第2章 Canvas基本功能 第3章 Canvas高级功能 第4章 lufylegend开源库件 第三部分 开发实战篇 第5章 从简单做起—“石头剪子布”游戏 第6章 开发“俄罗斯方块”游戏 第7章 开发“是男人就下一百...
#### 第1章 基础知识 - **1.1 canvas元素** - **1.1.1 canvas元素的大小与绘图表面的大小**:`canvas`元素是HTML5中新增的一个用于绘制图形的标签。它本身并不具备任何渲染能力,必须通过JavaScript来进行绘制。该...
在"响应式Web开发项目教程 第二章"中,我们将深入探讨这些关键知识点。 首先,HTML5是现代Web开发的基础,它引入了许多新的元素和特性,以支持更好的结构化内容和多媒体处理。例如,`<header>`、`<footer>`、`...
根据压缩包子文件的文件名称“3_3_圆弧”,我们可以推测这可能是一个关于第3章第3节关于圆弧的教程或者示例代码。文件可能包含了用某种编程语言实现的绘制圆弧和动态变化圆的代码示例,或者是一些相关的图像资源。 ...
在本压缩包中,我们包含了四个关于小程序游戏的章节,分别是第11章“界面API·手绘时钟”,第12章“拼图游戏”,第13章“推箱子游戏”以及第14章“贪吃蛇游戏”。这些章节详细讲解了如何使用小程序的界面API来开发...
第2章 Canvas API 22 2.1 HTML5 Canvas概述 22 2.1.1 历史 22 2.1.2 canvas是什么 23 2.1.3 canvas坐标 23 2.1.4 什么情况下不用canvas 23 2.1.5 替代内容 24 2.1.6 CSS和canvas 25 2.1.7 浏览器对...
第2章 Canvas API 22 2.1 HTML5 Canvas概述 22 2.1.1 历史 22 2.1.2 canvas是什么 23 2.1.3 canvas坐标 23 2.1.4 什么情况下不用canvas 24 2.1.5 替代内容 24 2.1.6 CSS和canvas 24 2.1.7 浏览器对HTML5 Canvas的...
本篇文章是一个由四个部分构成的系列的第二部分,该文章系列旨在寻找并突出说明HTML5中的变化。其开始先介绍新的标签和页面的组织,接着提供一些网页设计方面的高层面信息,然后是表单的创建,以及API的使用及其价值...
- 示例章节:第二章(第23页起) 2. **SVG(Scalable Vector Graphics)**: - SVG是一种基于XML的矢量图像格式,可以在不同分辨率下保持清晰度。 - 示例章节:第三章(第63页起) 3. **音频与视频支持**: - ...
"Android开发案例大全第二版源代码 第七章代码"提供了一整章的实例,帮助开发者深入理解Android应用开发的关键技术和实践。这一章节可能涵盖了许多Android应用开发的核心概念和实践技巧。 首先,我们可以从“第七章...
- **第2章**:Canvas API。讲解如何使用Canvas API进行图形渲染。 - **第3章**:SVG。介绍SVG的基本概念和如何使用SVG创建矢量图形。 - **第4章**:音频和视频。探讨如何利用HTML5内置的支持直接在网页中嵌入音频和...
《Pro HTML5 Programming 2nd Edition》这本书,中文可以理解为《精通HTML5编程 第二版》,它是一本专注于HTML5技术的进阶书籍。本书主要面向中高级的Web开发专业人士,目的是教授如何构建具有卓越功能、速度和响应...
第二部分讲解了jwebsocket、rgraph、webgl等3个重要框架和技术的详细使用方法。 《html 5开发精要与实例详解》一共12章:第1章分别用2个案例演示了如何利用html 5中的结构元素来构建一个博客网站和企业门户网站;第2...
《疯狂Android讲义第二版》是一本深入浅出的Android开发教程,其光盘源码涵盖了从第十一章到第十五章的重要知识点。这些章节主要涉及Android应用开发的高级技术,包括用户界面优化、多媒体处理、网络编程、数据存储...