1、绘制图片(drawImage)(重点)

1.1 基本绘制图片的方式

  • context.drawImage(img, x, y);
  • 参数:
    • img 可以为:图片、视频或者canvas画布
    • x,y 绘制图片左上角的坐标, img是绘制图片的dom对象。

1.2 在画布上绘制图像,并规定图像的宽度和高度

  • context.drawImage(img, x, y, width, height);
  • width:绘制到canvas中展示的宽度
如果指定宽高,最好成比例,不然图片会被拉伸
等比公式: toH = Height * toW / Width;
设置高 = 原高度 * 设置宽/ 原宽度;

1.3 图片裁剪,并在画布上定位被剪切的部分

  • context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);
  • 参数:
    • sx, sy:被剪裁图片的其实位置
    • swidth:裁剪图片的高度 sheight:裁剪的高度
    • x, y : 要绘制到画布上的位置
    • width :要绘制到画布上的宽度
    • height:要绘制到画布上的高度

1.4 用JavaScript创建img对象

  • 第一种方式:
  • var img = document.createElement("img");

  • 第二种方式:

var img = new Image(); //这个就是 img标签的dom对象
img.src = "imgs/arc.gif";
img.alt = "文本信息";
img.onload = function() {
//图片加载完成后,执行此方法
}

1.5 绘制图片的步骤

  • 1 创建图片对象
  • 2 等待图片加载完成
  • 3 开始绘制图片

1.5.1 加载图片的问题

  • 需要使用 onload事件 等待图片加载完成之后,再绘制!

练习

  • 练习1: 绘制整个图片
  • 练习2: 绘制图片的一部分
  • 练习3: 绘制序列帧动画

2、变换 (重点)

2.1 平移

  • ctx.translate(x,y) 方法重新映射画布上的 (0,0) 位置
  • 参数说明:
  • x: 添加到水平坐标(x)上的值
  • y: 添加到垂直坐标(y)上的值
  • 发生位移后,相当于把画布的0,0坐标 更换到新的x,y的位置,所有绘制的新元素都被影响。
  • 位移画布一般配合缩放和旋转等。

2.2 缩放

  • scale() 方法缩放当前绘图,更大或更小
  • 语法:context.scale(scalewidth,scaleheight)
    • scalewidth : 缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)
    • scaleheight : 缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%, etc.)
  • 注意:缩放的是整个画布,缩放后,继续绘制的图形会被放大或缩小。

2.3 旋转

  • context.rotate(radian); 旋转当前的画布
  • 注意参数是弧度(PI)
  • 如需将角度转换为弧度,请使用 degrees*Math.PI/180 公式进行计算。

练习

  • 在画布左右两侧分别绘制两个圆
  • 绘制两个正方形(宽度:100 和 50)
  • 绘制旋转的矩形

3 环境

前面提到 Canvas 是含有状态的, 也就是说需要修改颜色, 直线样式,
绘图方式等效果时需要开启一个新的状态. 但是有时在绘制过程中需要修改状态,
同时绘制完当前状态后又需要回到之前的状态中继续绘制另外的形状.
那么只有再将修改过的样式载更改回来. 如果在该状态中修改的属性较多,
那么每次在回到之前状态时就有很多的代码. Canvas 中引入了状态的保持机制. 使用 CanvasRenderingContext2D.save()
方法可以保存当前状态. 如果需要恢复到已经保存的状态, 只需要调用
CanvasRenderingContext2D.restore() 方法即可. 状态保持的机制是基于状态栈实现的. 也就是说 save 一次就存储一个状态. restore
一次就将刚刚存入的恢复. 如果 save 两次, 就需要 restore 两次, 才可以恢复到最先的状态. 一般在封装绘图的时候都会采用开始绘制之前, save 一次, 然后 开启一个新路径, 然后绘制结束后
restore, 然后再开启一个新路径. 这样保持当前状态不会对其他绘图代码构成影响.

3.1 优化

canvas 在绘制图片的时候, drawImage 方法还支持将一个 canvas 绘制到另一个 canvas 中.
因此使用该功能, 可以在内存中完成复杂的绘图, 将绘制好的半成品再绘制到 canvas
中合成需要的效果.

3.2 绘制环境保存和还原(重要)

  • ctx.save() 保存当前环境的状态
  • ctx.restore() 返回之前保存过的路径状态和属性

4 canvas的其他样式设置

4.1 设置阴影(,少用,性能差)

  • 类比于CSS3的阴影。
  • shadowColor : 设置或返回用于阴影的颜色
  • shadowBlur : 设置或返回用于阴影的模糊级别,大于1的正整数,数值越高,模糊程度越大
  • shadowOffsetX: 设置或返回阴影距形状的水平距离
  • shadowOffsetY: 设置或返回阴影距形状的垂直距离
    ctx.fillStyle = "rgba(255,0,0, .9)"
ctx.shadowColor = "teal";
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 10;
ctx.shadowOffsetY = 10;
ctx.fillRect(100, 100, 100, 100);

4.2 创建线性渐变的样式

  • 一般不用,都是用图片代替,canvas绘制图片效率更高。
  • 线性渐变可以用于 矩形、圆形、文字等颜色样式
  • 线性渐变是一个对象
  • 语法:ctx.createLinearGradient(x0,y0,x1,y1);
    • 参数:x0,y0起始坐标,x1,y1结束坐标
    例如:
//创建线性渐变的对象,
var grd = ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"green"); //添加一个渐变颜色,第一个参数介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置。
grd.addColorStop(1,"white"); //添加一个渐变颜色
ctx.fillStyle = grd; //关键点,把渐变设置到 填充的样式
ctx.fillRect(10, 10, 200, 100);

4.3 设置圆形渐变(径向渐变)

  • 创建放射状/圆形渐变对象。可以填充文本、形状等
  • context.createRadialGradient(x0,y0,r0,x1,y1,r1);
  • radial 半径的;放射状的;光线的;光线状的 英 ['reɪdɪəl] 美 ['redɪəl]
  • 参数详解:
    • x0: 渐变的开始圆的 x 坐标
    • y0: 渐变的开始圆的 y 坐标
    • r0: 开始圆的半径
    • x1: 渐变的结束圆的 x 坐标
    • y1: 渐变的结束圆的 y 坐标
    • r1: 结束圆的半径
    var rlg = ctx.createRadialGradient(300,300,10,300,300,200);
rlg.addColorStop(0, 'teal'); //添加一个渐变颜色
rlg.addColorStop(.4, 'navy');
rlg.addColorStop(1, 'purple');
ctx.fillStyle = rlg;//设置 填充样式为延续渐变的样式
ctx.fillRect(100, 100, 500, 500);

4.4 绘制背景图(了解)

  • ctx.createPattern(img,repeat) 方法在指定的方向内重复指定的元素了解
  • pattern:n. 模式;图案;样品 英 ['pæt(ə)n] 美 ['pætɚn]
  • 第一参数:设置平铺背景的图片,第二个背景平铺的方式。
    • image : 规定要使用的图片、画布或视频元素。
    • repeat : 默认。该模式在水平和垂直方向重复。
    • repeat-x : 该模式只在水平方向重复。
    • repeat-y : 该模式只在垂直方向重复。
    • no-repeat: 该模式只显示一次(不重复)。
    var ctx = c.getContext("2d");
var img = document.getElementById("lamp");
var pat = ctx.createPattern(img,"repeat");
ctx.rect(0,0,150,100);
ctx.fillStyle=pat;// 把背景图设置给填充的样式
ctx.fill();

4.5 设置绘制环境的透明度

  • ctx.globalAlpha = number;
  • number: 透明值。必须介于 0.0(完全透明) 与 1.0(不透明) 之间。
  • 注意:设置透明度是 全局的 透明度的样式

4.6 画布限定区域绘制

  • ctx.clip(); 方法从原始画布中剪切任意形状和尺寸
  • 一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)
  • 一般配合绘制环境的保存和还原。
    // Create clipping region
ctx.arc(100, 100, 75, 0, Math.PI*2, false);
ctx.clip(); ctx.fillRect(0, 0, 100,100);

aaarticlea/png;base64,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" alt="" />

4.7 画布保存base64编码内容(重要)

  • 把canvas绘制的内容输出成base64内容。
  • 语法:canvas.toDataURL(type, encoderOptions);
  • 例如:canvas.toDataURL("image/jpg",1);
  • 参数:
    • type,设置输出的类型,比如 image/png image/jpeg等
    • encoderOptions: 0-1之间的数字,用于标识输出图片的质量,1表示无损压缩,类型为: image/jpeg 或者 image/webp 才起作用。
    var canvas = document.getElementById("canvas");
var dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby
// blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC" var img = document.querySelector("#img-demo");//拿到图片的dom对象
img.src = canvas.toDataURL("image/png"); //将画布的内容给图片标签显示

4.8 画布渲染画布(重要)

  • ctx.drawImage(img,x,y);
  • img 参数也可以是画布,也就是把一个画布整体的渲染到另外一个画布上。
    var canvas1 = document.querySelector('#cavsElem1');
var canvas2 = document.querySelector('#cavsElem2');
var ctx1 = canvas1.getContext('2d');
var ctx2 = canvas2.getContext('2d');
ctx1.fillRect(20, 20, 40, 40); //在第一个画布上绘制矩形 ctx2.drawImage(canvas1, 10, 10); //将第一个画布整体绘制到第二个画布上

5 了解贝塞尔曲线

5.1 绘制一条二次方曲线。

  • 微软的画图板中的曲线的颜色。
  • quadratic:二次方的意思, 英 [kwɒ'drætɪk] 美 [kwɑ'drætɪk]
  • Curve:曲线的意思, 英 [kɜːv] 美 [kɝv]
  • 语法: context.quadraticCurveTo(cpx,cpy,x,y);
  • 参数:
    • cpx: 贝塞尔控制点的 x 坐标
    • cpy: 贝塞尔控制点的 y 坐标
    • x : 结束点的 x 坐标
    • y : 结束点的 y 坐标

aaarticlea/gif;base64,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" alt="" width="258" height="140" />

    ctx.beginPath();
ctx.moveTo(20,20);
//绘制2次方曲线,贝赛尔曲线
ctx.quadraticCurveTo(20,100,200,20);
ctx.stroke();

5.2 绘制贝塞尔曲线

  • 绘制一条三次贝塞尔曲线
  • 语法:context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
  • 提示:三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用 beginPath() 和 moveTo() 方法来定义开始点。
  • 参数说明:
    • cp1x: 第一个贝塞尔控制点的 x 坐标
    • cp1y: 第一个贝塞尔控制点的 y 坐标
    • cp2x: 第二个贝塞尔控制点的 x 坐标
    • cp2y: 第二个贝塞尔控制点的 y 坐标
    • x: 结束点的 x 坐标
    • y: 结束点的 y 坐标
    //绘制复杂的贝塞尔曲线
ctx.beginPath();
ctx.moveTo(400,400);
//参数说明:context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
// cp1x: 第一个贝塞尔控制点的 x 坐标
// cp1y: 第一个贝塞尔控制点的 y 坐标
// cp2x: 第二个贝塞尔控制点的 x 坐标
// cp2y: 第二个贝塞尔控制点的 y 坐标
// x: 结束点的 x 坐标
// y: 结束点的 y 坐标
ctx.bezierCurveTo(500, 200, 600, 600, 700, 300);
ctx.stroke();

aaarticlea/gif;base64,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" alt="" width="290" height="166" />

6、其他API说明

6.1 创建两条切线的弧

  • 在画布上创建介于当前起点和两个点形成的夹角的切线之间的弧
  • 语法: context.arcTo(x1,y1,x2,y2,r); //类比:css3中的圆角。
  • 例如: ctx.arcTo(240, 100, 240, 110, 40);
  • 参数:
    • x1: 弧的端点1的 x 坐标
    • y1: 弧的端点1的 y 坐标
    • x2: 弧的端点2(终点)的 x 坐标
    • y2: 弧的端点2(终点)的 y 坐标
    • r : 弧的半径
    //代码demo:
ctx.beginPath();
ctx.moveTo(100,100);
ctx.lineTo(200,100);
//context.arcTo(x1,y1,x2,y2,r); //类比:css3中的圆角。
ctx.arcTo(240, 100, 240, 110, 40);
ctx.lineTo(240, 300);
ctx.stroke();

aaarticlea/png;base64,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" alt="" width="427" height="311" />

6.2 判断点是否在路径中

  • context.isPointInPath(x,y);
  • 解释:如果指定的点位于当前路径中,返回 true;否则返回 false
  • 作用:判断坐标 x, y 是否在当前的路径中。
    ctx.rect(10, 10, 100, 100);
ctx.stroke();
console.log(ctx.isPointInPath(10, 10)); // true

6.3 如果以后做canvas游戏方向开发深入学习可以扩展内以下容:

  • setTransform() 将当前转换重置为单位矩阵。然后运行 transform()
  • transform() 替换绘图的当前转换矩阵
  • globalCompositeOperation 设置或返回新图像如何绘制到已有的图像上
  • 像素操作

html5中canvas(2)的更多相关文章

  1. H5_0009:关于HTML5中Canvas的宽、高设置问题

    关于HTML5中Canvas的宽.高设置问题 Canvas元素默认宽 300px, 高 150px, 设置其宽高可以使用如下方法(不会被拉伸): 方法一:        <canvas widt ...

  2. html5中canvas的使用 获取鼠标点击页面上某点的RGB

    1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script ...

  3. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  4. HTML5中Canvas概述

    一.HTML5 Canvas历史 Canvas的概念最初是由苹果公司提出的,用于在Mac OS X WebKit中创建控制板部件(dashboard widget).在Canvas出现之前,开发人员若 ...

  5. HTML5中canvas介绍

    1.什么是Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签 canvas 提供了一个空白的图形区域,可以使用特定的JavaScript API来绘画图形(canvas 2D ...

  6. HTML5中canvas大小调整

    今天用到canvas元素,发现它的大小不是像普通dom元素一样,直接设置css样式可以改变的,它会由自己原本的大小伸缩. 例如, <canvas id='canvas'></canv ...

  7. html5中Canvas为什么要用getContext('2d')

    HTML DOM getContext() 方法 HTML DOM Canvas 对象 定义和用法 getContext() 方法返回一个用于在画布上绘图的环境. 语法 Canvas.getConte ...

  8. HTML5中canvas的save和restore方法

    canvas的save和restore方法: save() 方法把当前绘画状态的一份拷贝压入到一个保存图像状态的栈中.这里的绘画状态指坐标原点.变形时的变化矩阵(该矩阵是调用 rotate().sca ...

  9. 第八讲:HTML5中canvas实现小球击打小方块游戏

    源码:http://download.csdn.net/detail/liumingm900913/7469969 游戏开发流程: 1.创建画布: 将画布放在div标签里面,这样能够控制画布居中的位置 ...

  10. 【html5】HTML5中canvas怎样画虚线

    在canvas API中,我们发现仅仅提供了画实线的方法实现,并没有虚线的相关方法,那么怎样实现画虚线呢? 现实中,虚线是由一小段小段的实线线段组成,那么仅仅要我们通过画出等长度的线段就能够组成我们想 ...

随机推荐

  1. 服务端Linux机器日志查看命令

    常用查看命令 ps -ef | grep java 查看当前机器运行程序: tail -100f /... 查看日志,实时的 less /- 按页查看日志,空格翻页,q退出 cat /.. | gre ...

  2. java 常用API 时间 练习

    package com.orcal.demc01; import java.util.Date; public class Xuexi { public static void main(String ...

  3. Python中用绘图库绘制一条蟒蛇

    一..构思设计蟒蛇的长度颜色等 首先,我们来构思一个简单的蟒蛇.让它的颜色为黄色,形状为一条正在爬行的蟒蛇. 二..准备绘图库 Python中有一个绘图库叫turtle我们先引入它. import t ...

  4. Python数据分析1------数据存取

    1.CSV格式数据: 1.1普通读取和保存 可以以纯文本形式打开,可以保存多条记录,每条记录的数据之间默认用逗号来分隔,csv就是逗号分割值的英文缩写. 保存为csv文件: import pandas ...

  5. Codeforces Round #447 (Div. 2)E. Ralph and Mushrooms

    Ralph is going to collect mushrooms in the Mushroom Forest. There are m directed paths connecting n  ...

  6. 训练1-B

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍 ...

  7. Ubuntu安装Docker 适合Ubuntu17.04版本

    Docker介绍 Docker是一个开源的容器引擎,它有助于更快地交付产品.Docker可将应用程序和基础设施层隔离,并且将基础设施当作程序一样进行管理.使用Docker,可以更快地打包,测试以及部署 ...

  8. 分布式深度学习之DC-ASGD

    本篇笔记是听刘铁岩老师做Distributed Deep Learning:New Driving Force of Artificial Intelligence报告整理而成 深度学习梯度下降公式如 ...

  9. 使用sdk自带工具uiautomatorviewer查看app控件属性

    双击打开即可 其只显示模拟器中的当前页面,所以需要在模拟器中打开你需要的页面,然后刷新

  10. Oracle 高水位(HWM: High Water Mark)

    http://blog.itpub.net/31397003/viewspace-2137246/ http://blog.itpub.net/12778571/viewspace-582695/ h ...