canvas基础之旅
canvas 主要使用2D rendering context API 实现其功能和特效。
canvas 一般浏览器都支持,但在ie9之前的是不支持的。(解决办法:添加IxplorerCanvas 脚本。)
学习canvas需要用到javscript和jQuery。
首先要引入jQuery库。
定义画布:
<script type="text/javascript">
var canvas = $("#mycanvas");
var context = canvas.get(0).getContext("2d");
</script>
画正方形:context.fillRect(x,y,width,height);(x,y)是正方形离坐标原点的距离,width,height是正方形的宽,高。
.strokeRect()也可以画正方形。同样是四个参数。
两者的区别是:.fillRect()画的正方形是有填充色的,但没有边框。
.strokeRect()画的正方没有填充色,但有边框。
画线条:lineTo();但不能直接像fillRect()那样调用。
要先调用一些其他的方法:
contex.beginPath();//开始路径
context.moveTo(x,y);//路径的起点坐标;
context.lineTo(x,y);//路径的终点坐标;
context.closePath();//结束路径;
context.stroke();//画出路径;
线和正方形的样式都可以调用相同的方法修改其样式:
.strokeStyle= "rgb()";修改形状和路径的填充颜色;
.lineWidth = 10;//修改形状的和路径的线宽;
4.保存和恢复图片
他们的机制值栈机制(先进后出)
保存:.save(),保存画布状态,通过多次调用save(),能够将绘制状态保存到栈中,最早的在栈的底部。
恢复:restore(),恢复画布状态;通过多次调用restore()能够自动取出最初添加到栈中的绘图状态;

5.变形
5.1平移
translate(x,y);平移的是坐标的点,新的坐标点(x,y)=原来(x,y)+translate(x,y);
会影响执行平移后的所有元素。
5.2缩放
scale(2,2),缩放的是倍数,不是像素,是(x,y)分别乘以2;
5.3旋转
rotate(0.7854) //Math.PI/4
旋转是以圆点坐标为中心点的,常常和translate( )一起使用
注意他们之间的顺序:
5.4变形矩阵
transform(2, 0, 2, 0, 150, 150) //(x轴缩放,y轴倾斜,x轴倾斜,y轴缩放,x轴平移,y轴平移)

6.合成
6.1 全局阿尔法值(透明度) //值会影响到修改之后所绘制的全部对象
globalAlpha = 0.5 //值在0~1之间
6.2 合成操作
globalCompositonOperation = " "; 共有11中方式,详情见《Canvas基础教程》
7.效果
7.1阴影
设置阴影通过4个全局属性控制:
.shadowBlur = 20 ; 阴影的模糊值
.shadowOffsetX; x轴上的偏移量;
.shadowOffsetY ,y轴上的偏移量;
.shadowColor = "rgba(0, 0, 0, 0.5)" ,阴影的颜色以及透明度(透明度)可设可不设;
7.2渐变
渐变的方式有两种:
createLinearGradient:线性渐变
都返回→→canvasGradient对象;
createRadiaGradient:放射性渐变 createRadialGradient方法,参数有(Xstart,Ystart,radiusStart,XEnd,YEnd,radiusEnd),也就是说,它在实行渐变时,使用了两个圆,一个是原始的圆,一个是渐变式圆,其实,这种通过坐标与半径控制的方式可以实现很多样式,比如
var gradient = context.createLinearGradient(0, 0, 0, canvas.height( ) );//渐变起点的坐标(x, y),渐变终点的坐标(x, y)
gradient.addColorStop = (0, "rgb(0, 0, 0)" ); //渐变的起点以及颜色值;
gradient.addColorStop = (1, "rgb(0, 0, 0)"); //渐变的终点以及颜色值;(0表示渐变起点,1表示渐变终点)
context.fillStyle = gradient ;
context.fillRect(0, 0, canvas.width(), canvas.height() );
7.3贝塞尔曲线
quedraticCurveTo:二次贝塞尔曲线;quedraticCurveTo(cpx, cpy, x, y),四个参数:(cpx, cpy)控制点坐标,(x, y)目标点坐标
bezierCurveT0:三次贝塞尔曲线;bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y),六个参数。

8画布与图像
8.1将画布导出为图像
将作为图像导出用toDataUrl方法:
context.save();
context.fillRect(20,20,50,50);
context.fillStyle = "rgb(255, 255, 0)";
context.fillRect(100, 100,50,50);
context.restore();
context.fillRect(200, 200,50,50);
var dataURL = canvas.get(0).toDataUrl;
或者
var dataURL = canvas.get(0).toDataUrl;
var img = $("<img></img>");
img.attr("src", dataURL);
canvas.replacWith(img);
8.2加载图片
将图像加载到画布上,调用drawImage方法:
conttext.drawImage(image, x, y);//(要绘制的图像,绘制图像的x坐标,绘制图像y坐标).
drawImage 调用的方法有两种,参数也不同:
var image = new Image( );
image.src = "aa.jpg";
$("image").load(function(){
conttext.drawImage(image, x, y)
})
8.3调整图像
context.drawImage(image, x, y, width, height)
8.4剪裁图像
context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);(源图像,源图像的裁剪区域(x, y)坐标,源图像的裁剪区宽度和高度,目标图像的坐标(x, y),绘制图像的宽度和高度);

8.5图像阴影
context.shadowBluer = 20;
context.shadowColor = "rgb(255, 0, 0)";
var image = new Image();
image.src = "example.jpg";
$(image).load(function(){
context.drawImage(image, 100, 100, 200, 200);
});
但是对图片裁剪之后,图片的阴影会消失。
canvas基础之旅结束。2015/11/3
canvas基础之旅的更多相关文章
- HTML5移动开发学习笔记之Canvas基础
1.第一个Canvas程序 看的是HTML5移动开发即学即用这本书,首先学习Canvas基础,废话不多说,直接看第一个例子. 效果图为: 代码如下: <!DOCTYPE html> < ...
- canvas 基础知识整理(二)
html部分: <canvas id="myCanvas" width="800" height="800" ></can ...
- canvas 基础知识整理(一)
canvas这个 HTML 元素是为了客户端矢量图形而设计的.它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上. html的基本 ...
- 《HTML5 CANVAS基础教程》读书笔记
一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...
- canvas 基础知识
canvas 基础 低版本的ie不支持html5,需要引入excanvas.js来让ie支持canvas. 检测支持canvas <canvas id="canvas" wi ...
- canvas基础语法
前面的话 canvas顾名思义是定义在浏览器中的画布.它不仅是一个普通的元素,更是一个强大的编程工具.它的出现已然超过了web基于文档的设计初衷,将网页这一形态的应用推向了另一个高度.利用canvas ...
- canvas API ,通俗的canvas基础知识(一)
在没学canvas的时候,觉得canvas是这么的神秘,这么的绚丽,这么的高深,用canvas做出来的效果是如此的炫酷,能做的事情如此的宽广,简直让我心生敬畏之心,时常感叹:我要是得此技能,必定要上天 ...
- canvas基础动画示例
canvas基础动画示例 本文主要用最简单的例子,展示canvas动画效果是如何实现的 动画效果,是一个球绕着一点旋转 const canvas = document.getElementById(' ...
- canvas基础学习
/** * Created by ty on 2016/7/11. * canvas 基础 */ window.onload = function() { var canvas = document. ...
随机推荐
- 设计模式学习之策略模式(Strategy,行为型模式)(13)
转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...
- Delphi编译dll时出错"Cannot debug project unless a host application is defined.use the run|parameters...dialog box."
问题: 在编写DLL程序的时候,按下F9或者按下那个绿色的箭头,会报错,如下 原因: 是因为你按下的F9或者那个绿色箭头是表示“Run”这个程序,但是DLL不是可执行文件,所以当然不能够运行,所以就会 ...
- HDU2205 又见回文(区间DP)
题意:给定两个字符串(可能为空串),求这两个串交叉组成新串的子串中的回文串的最大长度. 布尔型变量dp[i][j][k][l]表示串a从i到j,b从k到l能否组成新串,初始化为false,则采取区间动 ...
- Oralce sysaux WRH$_ACTIVE_SESSION_HISTORY清理
In this Document Symptoms Cause Solution References Symptoms sysaux表空間的WRH$_ACTIVE_SESSION_HISTORY表變 ...
- Oracle ASM
一 Oracle ASM簡介 Oracle 10g推出的管理磁盤的新方式,用於取代LVM技術.主要用于RAC環境 二 Oracle ASM的配置安裝 1.安裝asm包 RedHat Linux5.x ...
- 使用PHPExcel导入Excel到MySql
.连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连 ...
- C语言中的static 详细分析
转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...
- 源码方式安装mysql5.5
mysql5.5开始,源码配置编译工具configure变成了cmake,所以先要去把cmake装上.并安装make,bison,cmake,gcc-c++,ncurses的包 去http://www ...
- 在IIS上部署SSL
背景: 在处理DropboxAPI开发时,其重定向的URL地址必须是https的[除了localhost],不得已在自己网站上加了ssl,下面简单介绍下添加自签名证书,毕竟只是临时使用. 1.打开II ...
- jbox使用总结
jbox是一个不错的插件 当使用get打开新页面的时候,可以使用h.对像ID来获得对像ID的值 Js代码 js代码: /** * @description: test * @author: BrinP ...