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中的图片并发来自包含它的页面所在的域,页面脚本将不能取得其中的数据。

转载于:https://www.cnblogs.com/BigIdiot/archive/2013/01/14/2860219.html

html5 Canvas API相关推荐

  1. java canvas 缩放图片_详解如何用HTML5 Canvas API控制图片的缩放变换

    摘要:这篇HTML5栏目下的"详解如何用HTML5 Canvas API控制图片的缩放变换",介绍的技术点是"html5_canvas.canvas.Html5.控制图片 ...

  2. 用html做个猜字游戏,HTML5 Canvas API制作简单的猜字游戏

    这篇文章主要介绍了借助HTML5 Canvas API制作一个简单的猜字游戏的实例分享,游戏中每局会自动生成一个字母,玩家按键盘来猜测该字母是哪一个,需要的朋友可以参考下 二话不说,先上效果图以及源代 ...

  3. 应用html5画布Apicss制作,程序设计HTML5 Canvas API

    复制代码 代码如下: try { document.createElement("Canvas").getContext("2d"); document.get ...

  4. html绘制圆形和弧形的代码,通过HTML5 Canvas API绘制弧线和圆形的教程

    在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍: JavaScript Code复制内容到剪贴板 arc(x, y, ...

  5. html5显示字母的值,使用HTML5 Canvas API控制字体的显示与渲染的方法

    今天我们开始征战一个全新的内容--HTML5 Canvas的文本API!要知道,艺术家通常同时也是一个书法家,所以我们要学习写字,而且是写出漂亮的字.是不是很有意思? 好了,先预告一下Canvas 文 ...

  6. html5 canvas api w3c官方中文,HTML5 Canvas 简介

    一.使用 Canvas 绘制路径 moveTo(x,y) 定义线条开始坐标 lineTo(x,y) 定义线条结束坐标 使用 stroke() 方法来绘制线条 通过指定从何处开始,在何处结束,来绘制一条 ...

  7. clear html5代码,用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能

    在现实世界中,我们使用画笔在画板上进行绘画:在html5 canvas中,我们同样可以使用canvas的画笔--CanvasRenderingContext2D对象在canvas上进行绘画.众所周知, ...

  8. HTML5 Canvas API 变换(translate函数)

    下面我们来看下在canvas上绘制图像的另一种方式--变换(translate函数的应用): 下面的代码:我们还是实现上篇文章的效果:画一条斜线.理论上的知识,自己买书去看吧! <!DOCTYP ...

  9. 29行代码使用HTML5 Canvas API绘制一颗红心

    源代码: <html><div style="width:200px;height:200px;"id="cloud">test can ...

最新文章

  1. 关于软件产业的两个契机
  2. 清华官宣:前百度总裁张亚勤正式加盟清华大学
  3. ad域时间源配置_Windows网络服务与配置管理之活动目录学习
  4. Linux 卷管理详解[ pv vg lv] —— 之三
  5. 【推荐实践】智能推荐算法在直播场景中的应用
  6. 【牛腩1】--- 服务器错误:编译错误
  7. 填坑 ---- arcgis api for javascript 加载天地图
  8. [翻译] UPCardsCarousel
  9. Atitit.分区对索引的影响 分区索引和全局索引 attilax总结
  10. linux root权限_怎样在Linux内核中埋炸弹获取root权限lt;2/2gt;终结篇
  11. php 获取某周的最后一天,PHP获取本周首先天和最后一天
  12. redis分布式锁学习总结
  13. Excel直接跳过隐藏行,粘贴数据到可见单元格
  14. 新特汽车在重庆“复活”:打造新品牌“电动屋”,已获网约车牌照
  15. 移动硬盘linux读取失败,无法读取移动硬盘|无法识别的6种修复方法插图
  16. 那个英雄辈出的年代——《资治通鉴》等历史札记有感2000字
  17. #如何理解使用for循环遍历lst与lst[:],如果使用remove更改列表结果会不同
  18. ggplot2-数据关系型图表
  19. SUS系统 postfix邮箱设置
  20. 为什么国内服务器需要备案?

热门文章

  1. Xshell6突然连不上K8S所在的虚拟机
  2. 游戏笔记本计算机购买,2021大学生买电脑,容易犯的七种错误!游戏本和轻薄本买哪个?...
  3. java 静态方法 多线程_Java静态方法的线程安全性问题
  4. PHP点歌插件,斗鱼弹幕点歌插件_小葫芦社区_小葫芦插件交流 - Powered by Discuz!
  5. python 获取向上两级路径_Python学习第171课--相对路径和绝对路径
  6. 互联网日报 | 6月18日 星期五 | 百度与极狐发布量产共享无人车;奈雪的茶预计6月30日登陆港交所;阿里云盘上线PC版...
  7. 大厂的产品经理是怎样进行产品迭代的
  8. 2020年中国直播电商行业研究报告
  9. 中国进口消费市场研究报告2020
  10. 南昌地铁信息化服务器,南昌地铁传来大消息!太方便了!