HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5。通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小。 <canvas id="mycanvas" style="width:500px;height:500px;"></canvas> 。要在canvas上画图,需要取得canvas的上下文,通过getContext方法来获取上下文。 var context=canvas.getContext("2d"); 在使用getContext方法之前,需要判断浏览器是否支持该方法。

  使用画布的toDataURL方法,可以将canvas转为图片格式。这个方法接收一个参数,即图片的MIME类型格式。如果要取得画布中一个png格式的图片,可以使用以下的代码:

  var url=canvas.toDataURL("image/png");
var img=document.createElement("img");
img.src=url;
  • 填充和描边

  2d上下文的两种基本操作就是填充和描边。填充就是用指定的颜色、渐变色、图像填充图形,描边在图形的边缘画线。大多数上下文操作都需要填充和描边操作,这两个操作的属性取决于strokeStyle和fillStyle。

 var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="#000099";
context.fillStyle="#0099FF"; }

  上面的代码为上下文的两种属性strokeStyle和fillStyle指定了颜色值。可以使用CSS中指定颜色值的任何格式,包括颜色名、十六进制编码、rgb、rgba、hsl和hsla。

  • 绘制矩形

  矩形是一个可以直接在2d上下文中绘制的图形。与矩形有关的方法包括fillRect、strokeRect和clearRect方法。这三个方法接收4个参数,矩形的x坐标、矩形的y坐标、矩形的长度、矩形的宽度。参数的单位是像素。

  

 var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="#000099";
context.fillStyle="#0099FF";
context.fillRect(10,10,50,50);
//context.strokeRect(0,0,200,200);
//downloadFile('ship.png', canvas.toDataURL("image/png")); }

  通过上面的代码可以绘制一个矩形,从10,10处开始绘制,矩形的长和高都是50px。

  

 var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="rgba(0,0,255,0.5)";
context.fillStyle="red";
context.fillRect(10,10,50,50);
context.fillStyle="rgba(0,0,255,0.5)";
context.fillRect(30,30,50,50);
//context.strokeRect(0,0,200,200);
//downloadFile('ship.png', canvas.toDataURL("image/png")); }

  通过指定fillStyle为rgba格式,可以绘制半透明的矩形。上面的代码创建了两个矩形,其中一个为半透明颜色。

  通过clearRect可以清除画布上面的图形。需要传入x坐标,y坐标,长度和高度。

 var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="rgba(0,0,255,0.5)";
context.fillStyle="red";
context.fillRect(10,10,50,50);
context.fillStyle="rgba(0,0,255,0.5)";
context.fillRect(30,30,50,50);
context.clearRect(0,0,50,50);
//context.strokeRect(0,0,200,200);
//downloadFile('ship.png', canvas.toDataURL("image/png")); }

  上面的代码使用clearRect方法清除画布上的图形,从0,0处开始清除,长度为50,高度也为50。

  • 绘制路径  

  2d上下文支持绘制路径的方法。通过路径可以创造复杂的形状和线条。要绘制路径,首先需要调用beginPath方法,表示要开始绘制路径。然后在调用以下方法:arc(x,y,radius,startangle,endangle,countclockwise),以x、y为圆心绘制一条弧线,起始和结束弧度分别为startangle、endangle。最后一个参数表示是否按逆时针方向计算,默认为false;arcTo(x,y,x1,y1,radius),从上一点开始绘制弧线到x1、y1为止,并以给定的半径radius穿过x、y;bezierCurveTo(c1x,c1y,c2x,c2y,x1,y1),从上一点开始绘制一条曲线,到x1、y1为止,并以c1x、c1y和c2x、c2y为控制点;lineTo(x,y),从上一点开始,绘制一条直线到x,y为止;moveTo(x,y),将绘图游标移动到x、y,不绘制线;quadraticCurveTo(cx,cy,x,y),从上一点开始绘制一条二次曲线,到x、y为止,并以cx和cy为控制点;rect(x,y,width,height),从x,y开始绘制一个矩形,长度为width,高度为height,该矩形是一个路径。

  

 var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="rgba(0,0,255,0.5)";
context.fillStyle="red";
context.beginPath();
//context.moveTo(10,10);
//context.rect(10,10,30,30);
context.moveTo(50,50);
context.lineTo(80,80);
context.lineTo(100,90);
context.stroke();
context.closePath();
//context.strokeRect(0,0,200,200);
//downloadFile('ship.png', canvas.toDataURL("image/png")); }

  通过上面的代码可以绘制一个多段线,从50、50处开始,然后到80、80,最后在100、90结束。

  

  var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="#000099";
context.fillStyle="red";
context.beginPath();
//绘制圆
context.arc(100,100,99,0,2*Math.PI,false);
//移动图标
context.moveTo(194,100);
//绘制圆
context.arc(100,100,90,0,2*Math.PI,false);
context.moveTo(100,100);
//分针
context.lineTo(100,20);
context.moveTo(100,100);
//时针
context.lineTo(35,100);
context.moveTo(100,100);
//秒针
context.lineTo(160,160);
context.stroke();
context.closePath(); //downloadFile('ship.png', canvas.toDataURL("image/png")); }

  通过上面的代码,可以在画布上绘制简单的时钟。

  

  • 绘制文本

  2d绘图上下文也提供了绘制文本的方法。绘制文本有两个方法fillText和strokeText。这两个方法需要四个参数:文本字符串、x坐标、y坐标、可选的最大像素宽度。这两个方法以下列3个属性为基础:font,表示文本样式,包括样式、大小和字体;textAlign,表示文本的对齐方法,start、end、left、right和center;textBaseline表示文本的基线,可能的值有top、hanging、middle、alphabetic、ideographic和bottom。

  fillText使用fillStyle属性绘制为本,strokeText方法使用strokeStyle属性绘制文本。通常情况,使用fillText来绘制文本。

  

  var canvas=document.getElementById("mycanvas");
if(canvas.getContext){
var context=canvas.getContext("2d");
context.strokeStyle="#000099";
context.fillStyle="red";
context.font="italic 35px 黑体";
context.textAlign="center";
context.textBaseline="middle";
context.fillText("JavaScript",100,100); //downloadFile('ship.png', canvas.toDataURL("image/png")); }

  通过上面的代码,在canvas中绘制文本。设置textAlign为center和textBaseline为middle,则文字位于100,100的水平和垂直中心点。

浅谈JavaScript的Canvas(绘制图形)的更多相关文章

  1. html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  2. 浅谈javascript函数节流

    浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...

  3. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  4. 浅谈JavaScript浮点数及其运算

    原文:浅谈JavaScript浮点数及其运算     JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...

  5. HTML5—canvas绘制图形(1)

    1.canvas基础知识 canvas元素是HTML5中新增的一个重要的元素,专门用来绘制图形,不过canvas本身不具备画图的能力,在页面中放置了canvas元素,就相当于在页面中放置了一块矩形的“ ...

  6. canvas 绘制图形

    canvas 绘制图形: 注意: canvas 的宽高设置在行内,否则会使画布(canvas)产生扭曲,绘图变形: <!DOCTYPE html> <html lang=" ...

  7. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  8. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  9. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

随机推荐

  1. E. Lost in WHU。矩阵快速幂!

    E. Lost in WHU 比赛的时候一直不知道样例怎么来的,然后和队友推了一下,然后还是没什么思路,样例手推很困难,然后我随口枚举了几个算法dp.广搜.快速幂.比赛结束问了谷队长结果真的是用快速幂 ...

  2. 【Openjudge】岛屿(并查集)

    题目链接 此题是并查集.考虑到水位不断上涨,所以将时间倒转.先统计最后一天的联通块个数,每一天浮出水面的块进行计算.复杂度O(玄学). 代码如下 #include<cstdio> #inc ...

  3. BZOJ 2595 [Wc2008]游览计划 ——斯坦纳树

    [题目分析] 斯坦纳树=子集DP+SPFA? 用来学习斯坦纳树的模板. 大概就是用二进制来表示树包含的点,然后用跟几点表示树的形态. 更新分为两种,一种是合并两个子集,一种是换根,换根用SPFA迭代即 ...

  4. BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】

    题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...

  5. CSV文件导出2

    public void exportCSVFile( HttpServletResponse response, ResultSet rs,String fileName,String headers ...

  6. Post Content_Length exceeds the limit

    2017.12,公司市场专员反馈我在公司开发与维护的iOS包内审系统在上传ipa包文件的时候报错了.经过调试发现原来是因为上传的文件太大导致报错(由下图可知,接收方允许的最大请求内容为128M,但我们 ...

  7. AC日记——接苹果 洛谷 P2690

    题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从树上落下.但是,由于 ...

  8. 使用icomoon把svg图片生成字体图标

    今天看了使用icomoon来将svg转换成图标字体,本来是不会使用别人给的svg,也不清楚具体的好处是什么,查了svg以后,越来越懵,svg挺好的为什么要转成图标字体呢. 一.SVG介绍 SVG 是一 ...

  9. vue之条件渲染

    一.v-if v-if指令用于条件的渲染一块内容,当指令的表达式返回true时,内容才会被渲染. <h1 v-if="isshow">要显示么</h1> d ...

  10. Tomcat7/8开启WebDAV的支持

    WebDAV是一种超文本传输协议,Tomcat默认是支持WebDAV的,且默认为禁用状态. 更多详细信息,请参考: https://zh.wikipedia.org/wiki/WebDAV http: ...