javascript:使用canvas绘图2D图形

HTML5最少欢迎的一个新功能就是canvas元素,这个元素负责在页面中设定一个区域,然后就可以使用javascript进行动态的绘图。

  • 基本用法

   

<canvas id="drawing" widht="200" height="300">
a drawing of somethind
</canvas>

设定了画布后,要去的绘图上下文,通过get.Context("2d")方法

var  drawing = document.getElementById("drawing");
if(drawing.getContext){
var context = drawing.getContext("2d");
}

使用toDataURL(),参数为图像的MIME类型格式,如toDataURL("image/png")

var  drawing = document.getElementById("drawing");
if(drawing.getContext){
var context = drawing.getContext("2d");
var imgURI = context.toDataURL("image/png");
var image = document.createElement("img");
image.src = img;
documemt.body.appendChild(image);
}
  • 2D上下文

  2D上下文的坐标开始与canvas元素的左上角。使用2D上下文可以绘制矩形、弧形和路径。2D上下文两个基本操作就是填充和描边,属性fillStyle()实现填充效果,属性strokeStyle()实现描边效果,这两个方法的参数为表示颜色的字符串、渐变对象、模式对象。

  1)绘制矩形

    对于绘制矩形有三种方法:fillRect() , strokeRect()  , clearRect()。这三个方法都接受四个参数,x坐标,y坐标,width,height。

    fillRect()的填充颜色由filleStyle()方法指定,同理stokeRect()由strokeStyle()指定。

    描边线条的宽度有lineWidth()指定,lineCap指定线条末端是平头(butt)、圆头(round)还是方头(square),lineJoin()控制线条相交的方式(圆交round,斜交bevel,斜接miter)

    clearRect()用于清理画布上得指定区域。

    

context.fillRect(10,10,50,50);
context.fillStyle("red");
context.stokeRect(20,20,50,50);
context.strokeStyle("green");
context.lineWidth(5);
context.lineCap(‘round‘);
context.lineJoin("round");

  2) 绘制路径

    绘制路径首先调用beginPath(),表示要绘制新的路径。然后调用下面的方法绘制实际的路径。

    1)绘制弧线   arc(x,y,radius,staryAngle,endAngle,counterClockWise) --- 以(x,y)为圆心,半径为radius,开始角度为startangle,结束角度为endangle,counterClockWise值为false表示按顺时针计算。

    2)从上一点开始绘制弧线  arcTo(x1,y1,x2,y2,radius),以x2,y2为终点,通过x1,y1

    3) 从上一个点绘制曲线  bezierCurveTo(c1x,c1y,c2x,c2y,x,y) ,从上一点开始绘制曲线,终点为x,y,以(c1x,c1y)(  c2x,c2y)为控制点

    4)从上一点开始绘制一条直线   lineTo(x,y)

    5) moveTo(x,y)  绘制图表移动到x,y点

    6) quadraticCurveTo(cx,cy,x,y) 绘制二次曲线,终点为x,y,cx,cy为控制点

    7)rect(x,y,widht,height)  绘制矩形路径

  创建路径后,调用closePath()绘制连接到起点的路径,调用fill()填充路径,调用stroke()创建描边路径。

    以下代码绘制了时钟:

    

//外圆
context.arc(100,100,99,0,2*Math.PI,false);
//内圆
context.arc(100,100,94,0,2*Math.PI,false);
context.moveTo(100,100);
context.lineTo(100,15);

context.moveTo(100,100);
context.lineTo(100,30);

//描边路径
context.storke();

  3)绘制文本

    绘制文本主要由两个方法:fillText(),stokeText(),接收四个参数:文本字符串,x坐标,y坐标,可选的最大宽度。

    这两个方法以下面的属性为基础:font, textAlign , textBaseline

    textAlign的值有start end  center,控制水平对齐方式 ,  textBaseline的值有middle,top,bottom,控制垂直对齐方式。

    辅助测量文本所占的宽度方法meatureText(文本字符串),返回的对象只有一个width属性,这个方法是以设置的font,textAlign,textBaseline属性来测量文本可宽度。

var fontsize = 140px;
context.font = fontsize + "  italic  Arial";
context.textAlig = center;
context.textBaseline = "top";
while(context.meatureText("hello").width > 140){
fontsize -- ;
context.font = fontsize + "  italic  Arial";
}
context.fillStyle("red");
context.fillText("hello",10,10);

  4)变换

    修改变化矩阵的方法:

    rotate(angle):围绕原点旋转angle角

    scale(scaleX,scaleY) : 缩放图像,在x方向乘以scaleX,在y方向乘以scaleY

    translate(x,y) : 将坐标原点移动到(x,y)点

    transform(m1_1,m2_1,m2_1,m2_2,dx,dy)  :  直接修改变换矩阵

    setTransforn(m1_1,m2_1,m2_1,m2_2,dx,dy) :  将变换矩阵重置为默认状态,在调用transform方法

    通过context.save()可以将设置保存下来,再通过context.restore(),从当前设置一级一级向上得到之前的设置

  5)绘制图像

    通过方法drawImage()绘制图像,不同的实现效果这个方法需要传入的参数不同。

    最简单的参数是,html的image元素,绘制区域起点x坐标,y坐标

    

var img = document.images[0];
context.drawImage(img,10,10);

    绘制图像的一部分到画布中:

    参数为:image元素,源图像的坐标起点x值,y值,width,height,目标图像的x值,y值,width,height.

    将一个canvas元素绘制到另一个画布中

    6)阴影

      shadowColor = 颜色值

      shadowOffsetX =  X方向的偏移量

      shadowOffsetY = Y方向的偏移量

      shadowBlur = 模糊值

    7)渐变

  •   线性渐变      

调用createLinearGradient(起点x坐标,起点y坐标,终点的x坐标,终点的y坐标),返回canvasGradient渐变对象。创建渐变对象后调用addColorStop(色标的位置,css颜色值),色标的位置从0到1,0代表开始的颜色,1代表结束的颜色,把这个方法返回的渐变对象赋给fillStyle或者storkeStyle(),就可以使用渐变来绘制形状或者描边。

      

var gradient = context.createLinearGradient(30,30,70,70);
gradient.addColorStop(0,‘‘white");
gradient.addColorStop(1,"blue")

context.fillStyle = gradient;
context.fillRect(30,30,40,40);
  •    径向渐变

方法类似线性渐变,context.createRadialGradient(起点圆的x坐标,y左边,半径,终点圆的x坐标,y坐标,半径)

  8)使用模式

    模式其实是重复的图像,调用方法createPattern(image元素,css的background-repeat值),将返回对象赋给fillstyle()

    

var img = document.images[0];
var pattern = context.createPattern(img,"repeat");
context.fillStyle = pattern;
context.fillRect(30,30,100,100); 

  createPattern的第一个参数也可以是video对象或者canvas对象

  9)获得图像数据

    调用方法getImageData(获得的图像区域的x坐标,y坐标,width,height) , 返回imageData对象,这个对象有三个属性:width,height,data . 其中data属性存储这图像中每一个像素的值,每个像素又保存着rgba四个元素值。

    var data = context.getImageData(0,0,image.width,image.height);

    red = data[0]

    gree = data[1]

    blue = data[2]

    alpha = data[3]

  10) 合成

    两个属性:globalAlpha = 0到1之间的值 ,  globalCompositionOperation = 指定的字符串值。

     globalAlpha设置所有绘制区域的透明度

     globalCompositionOperation指定先绘制的图形与后绘制的图形如何重叠。

    

  

原文地址:https://www.cnblogs.com/lingLongBaby/p/8608946.html

时间: 2024-10-09 17:40:39

javascript:使用canvas绘图2D图形的相关文章

思维导图(自己整理,希望对大家有用):JavaScript函数+canvas绘图+Array数组

1.javascript函数: 2.Array数组: 3.canvas绘图:

《JAVASCRIPT高级程序设计》Canvas绘图-2D上下文

Canvas是HTML5添加的新元素,这个元素负责在页面中设定一个区域,然后通过JavaScript动态的在这个区域绘制图形.<canvas>由几组API组成,除了具备基本绘图能力的2D上下文,<canvas>还建议了一个名为WebGL的3D上下文,目前,支持该元素的浏览器都支持2D上下文,但对WebGL的支持还不够好.以下仅介绍2D上下文. 一.2D上下文 1.进行填充和描边 2D上下文的两种基本绘图操作是填充和描边:填充,是指的用指定的样式填充图形:描边,就是只在图像边缘划线.

HTML5 &lt;canvas&gt; 元素用于图形的绘制,通过脚本(通常是javascript)完成

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形 可以通过多种方法使用canvas绘制路径\盒\圆以及添加图像 创建一个画布(Canvas) 一个画布在网页中是一个矩形框,通过 <canvas> 元素来绘制. 注意: 默认情况下 <canvas> 元素没有边框和内容. <canvas>简单实例如下: <canvas id="myCanvas" width="200" height="100&

JavaScript高级程序设计学习笔记第十五章--使用Canvas绘图

一.基本用法 1.要使用<canvas>元素,必须先设置其 width 和 height 属性,指定可以绘图的区域大小.能通过 CSS 为该元素添加样式,如果不添加任何样式或者不绘制任何图形,在页面中是看不到该元素的. 2.要在这块画布(canvas)上绘图,需要取得绘图上下文.而取得绘图上下文对象的引用,需要调用getContext()方法并传入上下文的名字.在使用<canvas>元素之前,首先要检测 getContext()方法是否存在,这一步非常重要.检测可以用如下方法进行:

HTML5之Canvas绘图——使用Canvas绘制图形的基本教程

原文转自:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用. 1.使用Canvas绘制直线: 1 <!doctype html> 2 <html> 3 <head> 4 <

JavaScript:使用Canvas绘图

1.基本用法 要使用<canvas>元素,必须先设置其width和height属性,指定可以绘图的区域大小,出现在开始后结束标签中的内容是后备信息,如果浏览器不支持<canvas>元素,就会显示这些信息.例如 <canvas id="drawing" width="200" height="200">A Drawing of something</canvas> 使用toDataURL()方法,可以

part11-2 Python图形界面编程(Tkinter常用组件、对话框(Dialog)、菜单、Canvas绘图)

五. Tkinter 常用组件 Tkinter 各组件的详细用法还需要掌握,也就是掌握各个“积木块”的的详细功能. 1. 使用 ttk 组件 在前面直接使用的 tkinter 模块下的 GUI 组件看上去并不美观.为此 Tkinter 引了一个 ttk 组件作为补充,并使用功能更强大的 Combobox 取代原来的 Listbox,且新增了 LabeledScale(带标签的Scale).Notebook(多文档窗口).Progressbar(进度条).Treeview(树)等组件. ttk 是

Canvas绘图方法和图像处理方法(转)

转自:http://javascript.ruanyifeng.com/htmlapi/canvas.html 概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap). 使用前,首先需要新建一个canvas网页元素. <canvas id="myCanvas" width="400" height="200"> 您的浏览器不支持canvas!

HTML学习总结(四)【canvas绘图、WebGL、SVG】

一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 SVG以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图.SVG 绘图很容易编辑与生成,但功能明显要弱一些. canvas可以完成动画.游戏.图表.图像处理等原来需要Flash完成的一