HTML5读书笔记之四:Canvas高级功能
<!DOCTYPE html> <html> <head> <title>CanvasTest2</title> <meta charset="utf-8"> <link href="./css/canvas.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="./jquery/jquery-1.11.1.min.js"> </script> <script type="text/javascript"> $(document).ready(function(){ var canvas = $("#myCanvas"); var context = canvas.get(0).getContext("2d"); /************************************保存和恢复绘图状态************************************************************************************** context.fillStyle = "rgb(255, 0, 0)"; //绘制风格 context.save(); //保存画布状态 context.fillRect(50, 50, 100, 100); context.fillStyle = "rgb(0, 0, 255)"; context.save(); context.fillRect(200, 50, 100, 100); context.restore(); //恢复画布状态 context.fillRect(350, 50, 100, 100); context.restore(); context.fillRect(50, 200, 100, 100); ***************************************变形--平移******************************************************************************************** context.fillRect(50, 50, 100, 100); context.translate(150, 150); //将原点从一个位置移到另一个位置 context.fillStyle="rgb(255, 0, 0)"; context.fillRect(50, 50, 100, 100); ***************************************变形--缩放******************************************************************************************** context.save(); //保存画布状态 context.translate(150, 150); context.scale(2, 2); //进行缩放部分 context.fillRect(0, 0, 100, 100); context.restore(); //恢复画布状态 context.fillRect(0, 0, 100, 100); //不进行缩放部分 ***************************************变形--旋转******************************************************************************************** context.translate(200, 200); //将要旋转的正方形的圆心平移 context.rotate(0.7854); //旋转45度角 context.fillRect(-50, -50, 100, 100); //绘制正方形 ***************************************变形--变换矩阵**************************************************************************************** context.setTransform(1, 0, 0, 1, 0, 0); //单位矩阵 var xScale = Math.cos(0.7854); //x轴缩放 var ySkew = -Math.sin(0.7854); //y轴倾斜 var xSkew = Math.sin(0.7854); //x轴倾斜 var yScale = Math.cos(0.7854); //y轴缩放 var xTrans = 200; //x轴平移 var yTrans = 200; //y轴平移 context.transform(xScale, ySkew, xSkew, yScale, xTrans, yTrans); context.fillRect(-50, -50, 100, 100); ***************************************合成--全局阿尔法值************************************************************************************ context.fillStyle = "rgb(63, 169, 245)"; context.fillRect(50, 50, 100, 100); context.globalAlpha = 0.5; //0.5是与globalAlpha匹配的全局阿尔法值,再次使用fillStyle时(带有一个0.5的全局阿尔法值)会使全局阿尔法值 context.fillStyle = "rgb(255, 123, 172)"; //,0.5*0.5=0.25 context.fillRect(100, 100, 100, 100); context.globalAlpha = 0.25; context.fillStyle = "rgb(255, 123, 172)"; context.fillRect(150, 150, 100, 100); ***************************************合成--合成操作***************************************************************************************** context.fillStyle = "rgb(63, 169, 245)"; context.fillRect(50, 50, 100, 100); context.globalCompositeOperation = "source-over"; //默认值,表示绘制的图形(源)将画在现有的画布(目标)之上 context.fillStyle = "rgb(255, 123, 172)"; context.fillRect(100 ,100, 100, 100); /* globalCompositeOperation支持11种属性:1.source-over 默认值,表示绘制的图形(源)将画在现有的画布(目标)之上 2.destination-over 与source-over相反,将目标绘制在源之上 3.source-atop ..不一一解释了,上网搜索,看合成效果会有更直观的印象 4.destination-atop 5.source-in 6.destination-in 7.source-out 8.destination-out 9.lighter 10.copy 11.xor */ /***************************************合成--阴影******************************************************************************************** //阴影效果可通过4个属性值来进行操作,shadowBlur(像素模糊值,默认0),shadowOffsetX(默认0),shadowOffsetY(默认0),shadowColor(默认设置为透明黑) /*例1 context.shadowBlur = 20; context.shadowColor = "rgb(0, 0, 0)"; context.fillRect(50, 50, 100, 100); */ /*例2 context.shadowBlur = 0; context.shadowOffsetX = 10; context.shadowOffsetY = 10; context.shadowColor = "rgba(100, 100, 100, 0.5)"; //透明灰 context.fillRect(200, 50, 100, 100); */ /*例3 context.shadowColor = "rgb(255, 255, 0)"; //金黄 context.shadowBlur = 20; context.shadowOffsetX = 0; context.shadowOffsetY = 0; context.beginPath(); context.arc(400, 100, 50, 0, Math.PI*2, false); context.fill(); */ /***************************************合成--渐变******************************************************************************************** //线性渐变createLinearGradient,放射性渐变createRadialGradient /*例1 var gradient = context.createLinearGradient(0, 0, 0, canvas.height()); gradient.addColorStop(0, "rgb(0, 0, 0)"); gradient.addColorStop(1, "rgb(255, 255, 255)"); context.fillStyle = gradient; context.fillRect(0, 0, canvas.width(), canvas.height()); */ /*例2 createRadialGradient(x0, y0, r0, x1, y1, r1) 两个圆之间存在渐变的关系 var gradient = context.createRadialGradient(300, 300, 10, 100, 100, 50); gradient.addColorStop(0, "rgb(0, 0, 0)"); gradient.addColorStop(1, "rgb(150, 150, 150)"); context.fillStyle = gradient; context.fillRect(0, 0, canvas.width(), canvas.height()); */ /*例3 var canvasCentreX = canvas.width()/2; var canvasCentreY = canvas.width()/2; var gradient = context.createRadialGradient(canvasCentreX, canvasCentreY, 0, canvasCentreX, canvasCentreY, 250); gradient.addColorStop(0, "rgb(0, 0, 0)"); gradient.addColorStop(1, "rgb(150, 150, 150)"); context.fillStyle = gradient; context.fillRect(0, 0, canvas.width(), canvas.height()); */ /***************************************合成--复杂路径***************************************************************************************** /*例1 //创建一个三角形 context.beginPath(); context.moveTo(100, 50); //将原点移动到指定点,创建一个全新的子路径 context.lineTo(150, 150); context.lineTo(50, 150); context.closePath(); context.stroke(); context.fill(); */ /*例2 //二次贝塞尔曲线 context.lineWidth = 5; context.beginPath(); context.moveTo(50, 250); context.quadraticCurveTo(250, 100, 450, 250); context.stroke(); */ /*例3 //三次贝塞尔曲线 context.lineWidth = 5; context.beginPath(); context.moveTo(50, 250); context.bezierCurveTo(150, 50, 350, 450, 450, 250); //参数含义自行百度吧 context.stroke(); */ /***************************************将画布导出为图像*****************************************************************************************/ context.save(); context.fillRect(50, 50, 100, 100); context.fillStyle = "rgb(255, 0, 0)"; context.fillRect(100, 100, 100, 100); context.restore(); context.fillRect(150, 150, 100, 100); var dataURL = canvas.get(0).toDataURL(); var url = $("#url"); url.html(dataURL); var img = $("<img></img>"); img.attr("src", dataURL); canvas.replaceWith(img); }); </script> </head> <body> <canvas id="myCanvas" width="1000" height="1000"> </canvas> <p id="url"></p> </body> </html>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。