HTML5 CANVAS制图 基础总结
一、基本绘图
首先,定义2D渲染变量ct(这里用了Jquery库):
var ct = $(#canvasId).get(0).getContext('2d');
以下是绘制各种基本图形的方法:
//绘制矩形(填充/描框)
ct.fillRect(x,y,w,h)
ct.strokeRect(x,y,w,h) //绘制路径--线条
ct.beginPath();
ct.moveTo(x0,y0);
ct.lineTo(x1,y1);
ct.closePath();
ct.stroke(); //绘制路径--圆弧
ct.beginPath();
ct.arc(x,y,r,start,end,true);
ct.closePath();
ct.fill(); //绘制文本
ct.font = "30px serif...";
ct.fillText(txt,x,y);
ct.strokeText(txt,x,y); //设置样式
ct.fillStyle = "rgb(r,g,b)";
ct.strokeStyle = "rgb()";
ct.lineWidth = 5;
还提供了一些灵活的方法:
//橡皮擦(擦除矩形范围)
ct.clearRect(x,y,w,h); //重置样式
canvas.attr("width",w);
二、高级功能
以下是对画布的一些变换操作:
ct.save()/restore() //保存/恢复
ct.translate(x,y) //平移
ct.scale(a,b) //放大、缩小
ct.rotate(Math.PI) //绕(0,0)旋转 //变换矩阵
ct.transform(xScale,ySkew,xSkew,yScale,xTrans,yTrans)
ct.setTransform(xScale,ySkew,xSkew,yScale,xTrans,yTrans) //重置
关于变换矩阵,有一篇很好的文章可以加深你的理解:http://shawphy.com/2011/01/transformation-matrix-in-front-end.html
这是些常用的操作:
ct.globalAlpha = 0.5 //透明度 //阴影
ct.shadowBlur = 20; //扩散
ct.shadowOffsetX = 10;
ct.shadowOffsetY = 10;
ct.shadowColor = rgba; //渐变(线性/放射性)
ct.createLinearGradient(x,y,x1,y1)
ct.createRadialGradient(x,y,r,x1,y1,r1)
//设渐变的始终颜色
addColorStop(0,"rgb()")/(1,"rgb()");
贝塞尔曲线绘制:
//最后两个参数是终点的坐标点
ct.beginPath();
ct.moveTo(50,250);
ct.quadraticCurveTo(250,100,450,250) //两次贝塞尔曲线
ct.bezierCurveTo(150,50,350,450,450,250) //三次贝塞尔曲线
ct.stroke();
画布导出为图像:
//生成图片的src地址
var imgURL = canvas.get(0).toDataURL();
//以下将画布替换为图片
var img = $("<img></img>");
img.attr("src",imgURL);
canvas.replaceWith(img);
三、图片处理
图片的引入和调整(图片的变换就是画布的变换,不再介绍):
//引入图片
var img = new Image();
img.src = ".jpg";
$(img).load(function(){
ct.drawImage(参数);
}) //图片调整
ct.drawImage(image,x,y,w,h)
//图片裁剪与调整,其中dx/dy/dw/dy为裁剪的参数
ct.drawImage(image,dx,dy,dw,dh,x,y,w,h)
高级处理(关于图像像素的绘制和处理,仅供了解):
//imgData对象
var imgData = ct.getImageData(x,y,w,h) //获取 //imgData对象的属性
imgData.width/height //宽高
imgData.data //像素集合数组,表示rgba //创建图像
var imgData = ct.createImageData(w,h)
ct.putImageData(imgData,x,y)
至此,基础知识已经总结完了,不过以上仅仅是基本的静态画布制作而已,如果你懂得灵活应用javascript,结合canvas就可以制作出很漂亮的动画或游戏。这些应用已经很多了,感兴趣可以查找相关信息。
HTML5 CANVAS制图 基础总结的更多相关文章
- HTML5 Canvas(基础知识)
最近笔者在学习HTML5的新元素<canvas>,会分享一些基础知识以及小例子,最终使用<canvas>实现一个绘制简单图表(条形图.线图或者饼图)的js库,会更新一到两篇文章 ...
- [HTML5 Canvas学习] 基础知识
HTML5 canvas元素通过脚本语言(通常是Javascript) 绘制图形, 它仅仅是一个绘图环境,需要通过getContext('2d')方法获得绘图环境对象,使用绘图环境对象在canvas元 ...
- HTML5 canvas之基础篇(一)
一.检测浏览器是否支持canvas if( !canvas || !canvas.getContext){ return; } 也可以使用modernizr.js库,Modernizr是一个易用的轻量 ...
- HTML5 canvas绘图基础(电子名片生成器源码)
创建canvas <canvas id="myCanvas" class="canvas"> 您的浏览器不支持canvas </canvas& ...
- html5 canvas结构基础
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Html5 Canvas动画基础碰撞检测的实现
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- HTML5 Canvas绘图基础
- HTML5 Canvas游戏开发实战 PDF扫描版
HTML5 Canvas游戏开发实战主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读 ...
- HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素
欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制 ...
随机推荐
- 对Unity3d C#手动处理异常产生
System.AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(_OnUn ...
- MD5算法的原理与实现
***********************************************声明************************************************ 原创 ...
- C#图片压缩处理
近期在做相冊功能遇到一个问题,就是载入图片的时候然后放大,感觉有点卡.图片可能有点大,所以考虑用缩略图来实现. 也就是在查询出来一个相冊图片 ,一页显示几十张,这几十张用缩略图来显示,看相信情况的时 ...
- 深入理解ASP.NET MVC Day1
深入理解ASP.NET MVC ASP.NET vs MVC vs WebForms 许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- php 开发技巧
以下九种PHP一个非常有用的功能.我不知道你还没有使用?1. 的功能,你可能知道的参数,任意数量PHP我同意你定义一个函数默认参数. 但你可能并不知道PHP还同意你定义一个全然随意的參数的函数以下是一 ...
- linux_ubuntu 16.04 更新wifi驱动_无法链接wifi问题
ubuntu kylin ubuntu kylin ubuntu kylin wifi 这个很好解决的,16.04 默认 没有使用wifi驱动设备,默认选择的是:不使用设备1.进入到,软件和更新 -- ...
- oracle_job 清空冗余数据 ,每一分钟执行一次
参照这个例子:http://cherryqq.iteye.com/blog/855022 思路: data表中有4条数据 ,relation有3条数据,通过data_id 对应,需要定时删除 data ...
- 从头开始学JavaScript (三)——数据类型
原文:从头开始学JavaScript (三)--数据类型 一.分类 基本数据类型:undefined.null.string.Boolean.number 复杂数据类型:object object的属 ...
- cocos2d-x多分辨率和随后的自适应CCListView的bug修复
cocos2d-x多分辨率自适配及因此导致的CCListView的bug修复 cocos2d-x是一款众所周知的跨平台的游戏开发引擎.因为其跨平台的特性.多分辨率支持也自然就有其需求. 因此.在某一次 ...