绘制基本的图形

<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8" />	<title>canvas</title></head><body><h1>画布</h1>	<canvas id="myCanvas" style="border:1px solid #ff0" width="200" height="100" > Your Browser does not support Canvas, please upgrade</canvas><dl>	<dt><h1>绘制图形的步骤</h1></dt>	<dd>		<ol>		    <li>第一步,创建一个带id的canvas元素</li>		    <li>第二步,通过id获取canvas,document.getElementById(id)</li>		    <li>第三步,创建Context对象,创造2D环境</li>		</ol>		<canvas id="myCanvas1" style="border:1px solid #ff0" width="200" height="100">		</canvas>	</dd></dl><dl>	<dt><h1>绘制直线</h1></dt>	<dd>		<ol>		    <li>第一步,使用moveTo定起点</li>		    <li>第二步,使用lineTo定终点</li>		    <li>第三步,使用stroke花线</li>		</ol>		<canvas id="myCanvas2" style="border:1px solid #ff0" width="200" height="100">			您的浏览器不支持		</canvas>	</dd></dl><dl>	<dt><h1>绘制矩形</h1></dt>	<dd>		<ol>		    <li>第一种方法,使用fill填充,用到的fillStyle和fillRect</li>		    <li>第二种方法,使用stroke绘制轮廓,用到的strokeStyle和strokeRect</li>		</ol>	</dd>	<canvas id="myCanvas3" style="border:1px solid #ff0" width="200" height="100">		你的浏览器支持,请更新浏览器	</canvas></dl><dl>	<dt><h1>绘制圆形</h1></dt>	<dd>		<ol>		    <li>用到了beginPath(),closePath(),arc(x,y,radius,startAngle,endAngle,是否按顺时针),fill方法</li>		    <li>fill是用来填充图形的;stroke是画轮廓</li>		</ol>		<canvas id="myCanvas4" style="border:1px solid #ff0">		</canvas>	</dd></dl><dl>	<dt><h1>绘制弧形</h1></dt>	<dd>		<ol>		    <li>使用的方法就是arc(x,y,radius,startAngle,endAngle,是否按顺时针)</li>		</ol>	</dd>	<canvas id="myCanvas5" style="border:1px solid #ff0">Your Browser does not support Canvas, please upgrade</canvas></dl><dl>	<dt><h1>绘制三角形</h1></dt>	<dd>		<ol>		    <li>fill是填充型;stroke是轮廓型;</li>		</ol>		<canvas id="myCanvas6" style="border:1px solid #ff0">		</canvas>	</dd></dl><dl>	<dt><h1>清空画布</h1></dt>	<dd>		<ol>		    <li>使用clearRect(x,y,w,h)清空指定的画布</li>		</ol>		<canvas id="myCanvas7" style="border:1px solid #ff0">			可以清空的画布		</canvas>		<button type="button" onclick="clearMap()">清空上面的画布</button>	</dd></dl><script type="text/javascript">// 绘制矩形var c=document.getElementById("myCanvas1");var context=c.getContext("2d");context.fillStyle="#ff00ff";context.fillRect(50, 25, 100, 50);// 绘制直线var c1=document.getElementById("myCanvas2");var context1=c1.getContext("2d");context1.moveTo(0, 0);context1.lineTo(200,100);context1.stroke();// 绘制矩形--填充var c2=document.getElementById("myCanvas3");var context2=c2.getContext("2d");context2.fillStyle="#ff00ff";context2.fillRect(0, 0, 200, 100);//绘制矩形-轮廓context2.strokeStyle="#fff";context2.strokeRect(0,0,100,50);// 绘制圆形--填充var c3=document.getElementById("myCanvas4");var context3=c3.getContext("2d");context3.fillStyle="#ff00ff";context3.beginPath();context3.arc(100, 75, 50, 0, Math.PI*2, true);context3.closePath();context3.fill();// 绘制圆形--轮廓context3.strokeStyle="#ff0";context3.beginPath();context3.arc(100, 75, 30,0,Math.PI*2, true);context3.stroke();// 绘制弧线var c5=document.getElementById("myCanvas5");var context5=c5.getContext("2d");for (var i = 0; i<5; i++) {	context5.strokeStyle="#ff00ff";	context5.beginPath();	context5.arc(0, 150, i*10, 0, Math.PI*3/2, true);	context5.stroke();}// 绘制三角形--填充型var c6 = document.getElementById("myCanvas6");var context6=c6.getContext("2d");context6.fillStyle="#ff00ff";context6.beginPath();context6.moveTo(25, 25);context6.lineTo(150,25);context6.lineTo(25,150);context6.closePath();context6.fill();// 绘制三角形-轮廓型context6.strokeStyle="#ff0";context6.beginPath();context6.moveTo(30, 30);context6.lineTo(120,30);context6.lineTo(30,120);context6.closePath();context6.stroke();// 测试清空画布var c7=document.getElementById("myCanvas7");var context7=c7.getContext("2d");context7.beginPath();context7.arc(150, 150, 100, -Math.PI*1/6, -Math.PI*5/6, true);context7.stroke();// 清空画布function clearMap(){	context7.clearRect(0,0,300,150);}</script></body></html> 

  绘制贝塞尔曲线: 

 
<dl>	<dt><h1>绘制二次贝塞尔曲线</h1></dt>	<dd>		<ol>		    <li>quadraticCurveTo(cp1x,cp1y,x,y),cp1x,cp1y为控制点的坐标,x,y为终点坐标;</li>		</ol>	</dd>	<canvas id="myCanvas8" style="border:1px solid #ff0" width="300" height="200">	</canvas></dl><dl>	<dt><h1>绘制三次贝塞尔曲线</h1></dt>	<dd>		<ol>		    <li>bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);cp1x,cp1y是第一个控制点的坐标;cp2x,cp2y是第二个坐标的控制点</li>		</ol>		<canvas id="myCanvas9" style="border:1px solid #ff0" width="300" height="200">		</canvas>	</dd></dl>// 绘制贝塞尔曲线var c8 = document.getElementById("myCanvas8");var context8=c8.getContext("2d");context8.strokeStyle="#ff00ff";context8.beginPath();context8.moveTo(0, 200);context8.quadraticCurveTo(75, 50, 300, 200);context8.stroke();context8.globalCompositeOperation="source-over";// 绘制三次贝塞尔曲线var c9=document.getElementById("myCanvas9");var context9=c9.getContext("2d");context9.strokeStyle="#ff0";context9.beginPath();context9.moveTo(0, 200);context9.bezierCurveTo(25,50,75,50,300,200);context9.stroke();context9.globalCompositeOperation="source-over"; 
 
图形的变化---保存与恢复canvas状态
 
 <!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8" />	<title>图形的变换</title></head><body>	<dl>		<dt><h1>保存与恢复Canvas状态</h1></dt>		<dd>			<ol>			    <li>save() :保存canvas的状态到堆中</li>			    <li>restore:从堆中恢复canvas的状态</li>			</ol>			<canvas id="myCanvas1" style="border: 1px solid #ff0;" width="300" height="200">			</canvas>		</dd>	</dl></body><script type="text/javascript">	// 保存和恢复canvas	var c1=document.getElementById("myCanvas1");	var context1=c1.getContext("2d");	// 绘制一个矩形	context1.fillStyle="#ff00ff";	context1.strokeStyle="red";	context1.fillRect(20, 20, 100, 100);	context1.strokeRect(20,20,100,100);	context1.fill();	context1.stroke();	// 保存当前的状态context1.save();	// 绘制另外一个矩形	context1.fillStyle="#f00";	context1.strokeStyle="green";	context1.fillRect(140, 20, 100, 100);	context1.fillRect(140, 20, 100, 100);	context1.fill();	context1.stroke();	//恢复第一个矩形的状态context1.restore();	//绘制两个矩形	context1.fillRect(20, 140, 50, 50);	context1.strokeRect(80,140,50,50);	</script></html> 
  
图形的变化---移动坐标空间 
   
 
  <dl>
		<dt><h1>移动坐标空间</h1></dt>
		<dd>
			<ol>
			    <li>context.translate(dx,dy),dx和dy分变为水平和垂直的便宜量</li>
			    <li>注意:移动之前会先保存画布</li>
			</ol>
		</dd>
</dl>
<canvas id="myCanvas1" style="border:1px solid #ff0" width="300" height="200">
1. </canvas>
var ctx1=document.getElementById("myCanvas1").getContext("2d"); 	ctx1.translate(50,50); 	ctx1.fillStyle="#ff0"; 	ctx1.fillRect(0, 0, 100, 100);
效果
     
      
   
图形的变化--旋转坐标空间:
 
   <dl>	<dt><h1>旋转坐标空间</h1></dt>	<dd>		<ol>		    <li>方法是rotate(angle)</li>		    <li>以原点为中心旋转,顺时针为正,选装的是canvas</li>		</ol>		<canvas id="myCanvas2" style="border:1px solid #ff0" width="700" height="300"></canvas>	</dd></dl> 	// 旋转坐标空间 	var ctx2=document.getElementById("myCanvas2").getContext("2d"); 	ctx2.save(); 	ctx2.rotate(Math.PI*1/4); 	ctx2.fillStyle="#ff00ff"; 	ctx2.fillRect(0, 0, 100, 100); 	ctx2.restore();
       
       

        
         
       
       
     
图形的变化--缩放图形:      
     <dl>	<dt><h1>缩放图形</h1></dt>	<dd>		<ol>		    <li>方法scale(x,y)</li>		    <li>大于1的值是放大,小于1的值是缩小</li>		</ol>		<canvas id="myCanvas3" style="border:1px solid #ff0" width="700" height="300">		</canvas>	</dd></dl>
1. 	// 缩放图形
 	var ctx3=document.getElementById("myCanvas3").getContext("2d"); 	ctx3.save(); 	ctx3.fillStyle="#ff00ff"; 	ctx3.scale(1.9,1.1); 	ctx3.fillRect(100, 100, 100, 100); 	ctx3.restore();
结果:
       
       
     图形的变化--矩阵的变换: 
    
    
• 可以实现平移,旋转,缩放,切变和镜像反射
• 方法:context.transform(m11x,m12y,m21x,m22y,dx,dy);写成矩阵是
• 矩阵变换后:x`=m11x+m21y+dx;  y`=m12x+m22y+dy;
• 移动的矩阵:(1,0,0,1,dx,dy); (0,1,1,0,dx,dy);
• 缩放的矩阵:(m11,0,0,m22,0,0);(0,m12,m21,0,0,0);
• 旋转:(cos0,sin0,-sin0,cose0,0,0);
• 将当前的矩阵变换为最初的矩阵:setTransform(m11,m12,m21,m22,dx,dy),会先重置再变换 
    
     
    
图形的组合
    <!DOCTYPE html><html lang="en"><head>     <meta charset="UTF-8" />     <title>图形的组合</title></head><body>     <dl>          <dt><h1>图形的组合</h1></dt>          <dd>               <ol>                   <li>globalCompositeOperation,指定它的值,来改变图形的绘制顺序和绘制方式</li>                   <li>globalAlpha,指定图形的透明度</li>                   <li>次法放老图形和新图形的中间</li>               </ol>          </dd>     </dl>     <dl>          <dt><h1>source-over 默认值</h1></dt>          <dd>               <ol>                   <li>新的图形覆盖在原图形上,默认值,source-over</li>               </ol>               <canvas id="myCanvas1" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>destination-over</h1></dt>          <dd>               <ol>                    <li>原有的图形覆盖在新的图形之上</li>               </ol>                <canvas id="myCanvas2" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>           <dt><h1>source-atop</h1></dt>          <dd>               <ol>                    <li>只是绘制原有的内容+重叠部分,且新在原上</li>               </ol>                <canvas id="myCanvas3" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>destination-atop</h1></dt>          <dd>               <ol>                    <li>只是绘制原有的内容+重叠部分,且原在新的上面</li>               </ol>                <canvas id="myCanvas4" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>source-in</h1></dt>          <dd>               <ol>                    <li>重叠部分,且新在上</li>               </ol>                <canvas id="myCanvas5" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>destination-in</h1></dt>          <dd>               <ol>                    <li>重叠部分,且原在上</li>               </ol>                <canvas id="myCanvas6" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>source-out</h1></dt>          <dd>               <ol>                    <li>新图形-重叠部分</li>               </ol>                <canvas id="myCanvas7" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>destination-out</h1></dt>          <dd>               <ol>                    <li>原图形-重叠部分</li>               </ol>                <canvas id="myCanvas8" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>lighter</h1></dt>          <dd>               <ol>                    <li>都显示,重叠部分加色处理</li>               </ol>                <canvas id="myCanvas9" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>darker</h1></dt>          <dd>               <ol>                    <li>都显示,重叠部分减色处理</li>               </ol>                <canvas id="myCanvas10" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>copy</h1></dt>          <dd>               <ol>                    <li>只保留新图形</li>               </ol>                <canvas id="myCanvas11" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>xor</h1></dt>          <dd>               <ol>                    <li>重叠的部分变为透明</li>               </ol>                <canvas id="myCanvas12" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>          <dt><h1>globalAlpha</h1></dt>          <dd>               <ol>                    <li>指定图像的透明度</li>               </ol>                <canvas id="myCanvas13" style="border: 1px solid #ff0;" height="200">               </canvas>          </dd>     </dl>     <script type="text/javascript">          // source-over 默认值          var ctx1=document.getElementById("myCanvas1").getContext("2d");          ctx1.fillStyle="red";          ctx1.fillRect(50, 50, 100, 100);          ctx1.globalCompositeOperation="source-over";          ctx1.fillStyle="blue";          ctx1.beginPath();          ctx1.arc(150, 125, 50, 0, Math.PI*2, true);          ctx1.closePath();          ctx1.fill();          // destination-over 原有的图形覆盖在新图形上          var ctx2=document.getElementById("myCanvas2").getContext("2d");          ctx2.fillStyle="red";          ctx2.fillRect(50, 50, 100, 100);          ctx2.globalCompositeOperation="destination-over";          ctx2.fillStyle="blue";          ctx2.beginPath();          ctx2.arc(150, 125, 50, 0, Math.PI*2, true);          ctx2.closePath();          ctx2.fill();          // source-atop           var ctx3=document.getElementById("myCanvas3").getContext("2d");          ctx3.fillStyle="red";          ctx3.fillRect(50, 50, 100, 100);          ctx3.globalCompositeOperation="source-atop";          ctx3.fillStyle="blue";          ctx3.beginPath();          ctx3.arc(150, 125, 50, 0, Math.PI*2, true);          ctx3.closePath();          ctx3.fill();          // destination-atop          var ctx4=document.getElementById("myCanvas4").getContext("2d");          ctx4.fillStyle="red";          ctx4.fillRect(50, 50, 100, 100);          ctx4.globalCompositeOperation="destination-atop";          ctx4.fillStyle="blue";          ctx4.beginPath();          ctx4.arc(150, 125, 50, 0, Math.PI*2, true);          ctx4.closePath();          ctx4.fill();           // source-in          var ctx5=document.getElementById("myCanvas5").getContext("2d");          ctx5.fillStyle="red";          ctx5.fillRect(50, 50, 100, 100);          ctx5.globalCompositeOperation="source-in";          ctx5.fillStyle="blue";          ctx5.beginPath();          ctx5.arc(150, 125, 50, 0, Math.PI*2, true);          ctx5.closePath();          ctx5.fill();            // source-in          var ctx6=document.getElementById("myCanvas6").getContext("2d");          ctx6.fillStyle="red";          ctx6.fillRect(50, 50, 100, 100);          ctx6.globalCompositeOperation="destination-in";          ctx6.fillStyle="blue";          ctx6.beginPath();          ctx6.arc(150, 125, 50, 0, Math.PI*2, true);          ctx6.closePath();          ctx6.fill();          // source-out         var ctx7=document.getElementById("myCanvas7").getContext("2d");          ctx7.fillStyle="red";          ctx7.fillRect(50, 50, 100, 100);          ctx7.globalCompositeOperation="source-out";          ctx7.fillStyle="blue";          ctx7.beginPath();          ctx7.arc(150, 125, 50, 0, Math.PI*2, true);          ctx7.closePath();          ctx7.fill();          // destination-out         var ctx8=document.getElementById("myCanvas8").getContext("2d");          ctx8.fillStyle="red";          ctx8.fillRect(50, 50, 100, 100);          ctx8.globalCompositeOperation="destination-out";          ctx8.fillStyle="blue";          ctx8.beginPath();          ctx8.arc(150, 125, 50, 0, Math.PI*2, true);          ctx8.closePath();          ctx8.fill();          // lighter         var ctx9=document.getElementById("myCanvas9").getContext("2d");          ctx9.fillStyle="red";          ctx9.fillRect(50, 50, 100, 100);          ctx9.globalCompositeOperation="lighter";          ctx9.fillStyle="blue";          ctx9.beginPath();          ctx9.arc(150, 125, 50, 0, Math.PI*2, true);          ctx9.closePath();          ctx9.fill();          // darker         var ctx10=document.getElementById("myCanvas10").getContext("2d");          ctx10.fillStyle="red";          ctx10.fillRect(50, 50, 100, 100);          ctx10.globalCompositeOperation="darker";          ctx10.fillStyle="blue";          ctx10.beginPath();          ctx10.arc(150, 125, 50, 0, Math.PI*2, true);          ctx10.closePath();          ctx10.fill();          // copy         var ctx11=document.getElementById("myCanvas11").getContext("2d");          ctx11.fillStyle="red";          ctx11.fillRect(50, 50, 100, 100);          ctx11.globalCompositeOperation="copy";          ctx11.fillStyle="blue";          ctx11.beginPath();          ctx11.arc(150, 125, 50, 0, Math.PI*2, true);          ctx11.closePath();          ctx11.fill();          // xor         var ctx12=document.getElementById("myCanvas12").getContext("2d");          ctx12.fillStyle="red";          ctx12.fillRect(50, 50, 100, 100);          ctx12.globalCompositeOperation="xor";          ctx12.fillStyle="blue";          ctx12.beginPath();          ctx12.arc(150, 125, 50, 0, Math.PI*2, true);          ctx12.closePath();          ctx12.fill();           // globalAlpha         var ctx13=document.getElementById("myCanvas13").getContext("2d");          ctx13.fillStyle="red";          ctx13.fillRect(50, 50, 100, 100);          ctx13.globalAlpha="0.5";          ctx13.fillStyle="blue";          ctx13.beginPath();          ctx13.arc(150, 125, 50, 0, Math.PI*2, true);          ctx13.closePath();          ctx13.fill();     </script></body></html>         
    
   
    
   

    图形的裁切 
  
   <!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" />  <title>图形的裁切</title></head><body>  <dl>    <dt>      <h1>图形的裁切</h1>    </dt>    <dd>      <ol>          <li>clip</li>          <li>原理是给图形蒙一层蒙版,没有被蒙住的,会被隐藏</li>          <canvas id="myCanvas" style="border: 1px solid #ff0;" height="300">          </canvas>      </ol>    </dd>  </dl>  <script type="text/javascript">    var ctx=document.getElementById("myCanvas").getContext("2d");    ctx.fillStyle="black";    ctx.fillRect(0, 0, 300, 300);    ctx.fill();     // 绘制圆形    ctx.beginPath();    ctx.arc(150, 150, 100, 0 , Math.PI*2 , true);    // 裁切路径    ctx.clip();    ctx.fillStyle="red";    ctx.fillRect(50,50,150 , 150);  </script></body></html>       
   

    线型的选择 
  
   
• lineWidth:设置线条的粗细,默认值为1;
• lineCap:设置端点的样式,butt(平头)、round(圆头)、square(方头);
• lineJoin:设置连接处样式,round(圆头)、bevel(斜平面)、miter(直头)默认;
• miterLimit:设置绘制交点的方式,给斜面长度设置一个上限,默认为10,当斜面长度超过线条宽度的10倍的时候,就会变成斜角。只是适用于miter。
绘制渐变
    
• 线性渐变:       
• 方法:createLinearGradient(x1,y1,x2,y2), 其中(x1,y1)是起点,(x2,y2)是终点;
• addColorStop(position,color):position是0~1的浮点;
• 径向渐变:       
• 方法:createRadialGradient(x1,y1,r1,x2,y2,r2);
• addColorStop(position,color),position的值是0~1
   // 线性渐变   var ctx1=document.getElementById("myCanvas1").getContext("2d");   var lingrad=ctx1.createLinearGradient(0,0,0,200);   lingrad.addColorStop(1/7,'#ff0000');   lingrad.addColorStop(2/7,'#ff9900');   lingrad.addColorStop(3/7,'#00ff00');   lingrad.addColorStop(4/7,'#00ffff');   lingrad.addColorStop(5/7,'#0000ff');   lingrad.addColorStop(6/7,'#ff00ff');   lingrad.addColorStop(1,'#ff0000');   ctx1.fillStyle=lingrad;   ctx1.strokeStyle=lingrad;   ctx1.fillRect(10,10,200,200);    

     绘制图案: 
   
    
• createPattern(img,type),type是类型,有repeat,repeat-x,repeat-y,no-repeat
• 注意:先有pattern对象,然后设置fillStyle
• 可以是img或者canvas
    <dt><h1>绘制图案</h1></dt>    <dd>      <ol>          <li>createPattern(img,type),type是类型,有repeat,repeat-x,repeat-y,no-repeat</li>          <li>注意:先有pattern对象,然后设置fillStyle</li>      </ol>      <canvas id="myCanvas3" width="600" height="300" style="border: 1px solid #ff0;">      </canvas>    </dd>   //绘制图案   var ctx3=document.getElementById("myCanvas3").getContext("2d");   var img=new Image();   img.src="banner-ilvcrp.png";   img.onload=function(){    var ptrn=ctx3.createPattern(img,'repeat');    ctx3.fillStyle=ptrn;    ctx3.fillRect(0,0,600,300);   }      

       创建阴影: 
     
    
• 用到四个属性:       
• ctx.shadowOffsetX=float;
• ctx.shadowOffsetY=float;
• ctx.shadowBlur=flaot;
• ctx.shadowColor=color;
 <dt><h1>创阴影建</h1></dt>      <dd>        <ol>            <li>shadowOffsetX</li>            <li>shadowOffsetY</li>            <li>shadowBlur</li>            <li>shadowColor</li>        </ol>        <canvas id="myCanvas4" width="600" height="300" style="border: 1px solid #ff0;">        </canvas>    </dd>//创建阴影   var ctx4=document.getElementById("myCanvas4").getContext("2d");   // 设置阴影   ctx4.shadowOffsetX=3;   ctx4.shadowOffset=3;   ctx4.shadowBlur=2;   ctx4.shadowColor="rgba(0,0,0,.5)";   // 绘制矩形   ctx4.fillStyle="#33ccff";   ctx4.fillRect(20, 20, 300, 60);   ctx4.fill();      

       绘制文字: 
     
    
• 填充文字:ctx.fillText(text,x,y,[maxW]),maxW是显示文字时候的最大的宽度,超过最大的宽度,字儿会变瘦;
• 绘制文字的轮廓:ctx.strokeText(text,x,y,[maxW])
• 文字的相关属性:       
• font:
• textAlign:left/right/center/start/end
• textBaseline:top/middle/bottom/
• 测量文字的宽度:measureText(text);
<dt><h1>绘制文字</h1></dt>      <dd>        <canvas id="myCanvas5" width="350" height="200" style="border: 1px solid #ff0;">        </canvas>    </dd> // 绘制文字   var ctx5=document.getElementById("myCanvas5").getContext("2d");   ctx5.font="italic 35px 黑体";   ctx5.fillStyle="red";   ctx5.fillText("绘制填充文字",30,60,200);   ctx5.strokeStyle="blue";   ctx5.strokeText("绘制轮廓文字",30,120,200);   // 测量文字的宽度   var txt1="我是要测量宽度的文字";   ctx5.fillText(txt1,30,140);   var mtxt1=ctx5.measureText(txt1);   ctx5.fillText(mtxt1.width,160,80);

操作和使用图像:


  • 引入图像:ctx.drawImage(img,x,y);
  • 改变图像大小:ctx.drawImage(img,x,y,w,h);
  • 创建图像切片:ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh),
  • sx,sy:指得是被原图的被裁切区域的起始位置
  • sw,sh:指得是被裁切的宽度和高度
  • dx,dy:在画布上显示的位置
  • dw,wh:在画布上显示的宽和高
  • 注意:为了实现图片预加载,先创建img,然后使用onload方法,最后指定url
 // 引入图像   var ctx6=document.getElementById("myCanvas6").getContext("2d");   var img=new Image();   img.onload=function(){   //这样可以实现预加载    ctx6.drawImage(img,0,0);   };   img.src='banner-ilvcrp.png';   // 改变图像大小   var ctx7=document.getElementById("myCanvas7").getContext("2d");   var img=new Image();   img.onload=function(){   //这样可以实现预加载    ctx7.drawImage(img,0,0,300,100);   };   img.src='banner-ilvcrp.png';   // 创建图像切片   var ctx8=document.getElementById("myCanvas8").getContext("2d");   var img=new Image();   img.onload=function(){   //这样可以实现预加载    ctx8.drawImage(img,0,0,300,200,0,0,400,300);   };   img.src='banner-ilvcrp.png';