天天看点

canvas第二天

<canvas id="myCanvas" width=1000 height=1000></canvas>

    var canvas = document.getElementById("myCanvas");

var c = canvas.getContext('2d');

// var offscreen = document.createElement("canvas");

// offscreen.width = offscreen.height = 10;

// offscreen.getContext("2d").strokeRect(0,0,6,6);

// var pattern = c.createPattern(offscreen,"repeat");

// // 线性渐变

// var bgfade = c.createLinearGradient(0,0,canvas.width,canvas.height);

// bgfade.addColorStop(0.0, "#88f");

// bgfade.addColorStop(1.0, "#fff");

// // 两个同心圆之间的一种渐变

// var peekhole = c.createRadialGradient(300,300,100, 300,300,300);

// peekhole.addColorStop(0., "transparent");

// peekhole.addColorStop(0.7,"rgba(100,100,100,.9)");

// peekhole.addColorStop(1.0, "rgba(0,0,0,0)");

// c.fillStyle = bgfade;

// c.fillRect(0,0,600,600);

// c.strokeStyle = pattern;

// c.lineWidth = 100;

// c.strokeRect(100,100,400,400);

// c.fillStyle = peekhole;

// c.fillRect(0,0,600,600);

// 获取一个字符串的屏幕显示宽度

// var width = c.measureText(text).width;

// 裁剪

// c.font = "bold 60pt sans-serif";

// c.lineWidth = 2;

// c.strokeStyle = "#000";

// // 勾勒矩形轮廓和文本轮廓

// c.strokeRect(175,25,50,325);

// c.strokeText("<canvas>", 15, 330);

// // 在外部定义一条包含内部的复杂路径

// polygon(c,3,200,225,200);

// polygon(c,3,200,225,100,true);

// // 将该路径定义成裁剪区域

// c.clip();

// // 用5个像素宽的线段来勾勒路径,完全在裁剪区域内

// c.lineWidth = 10;

// c.stroke();

// c.fillStyle = "#aaa";

// c .fillRect(175,25,50,325);

// c.fillStyle = "#888";

// c.fillText("<canvas>",15,330);

// 定义一种不明显的阴影

// c.shadowColor = "rgba(100,100,100,4)";

// c.shadowOffsetX = c.shadowOffsetY = 3;

// c.shadowBlur = 5;

// // 使用阴影在一个蓝色的方框中绘制一些文本

// c.lineWidth = 10;

// c.strokeStyle = "blue";

// c.strokeRect(100,100,300,200);

// c.font = "Bold 36pt Helvetica";

// c.fillText("Hello World",115, 225);

// c.shadowOffsetX = c.shadowOffsetY = 20;

// c.shadowBlur = 10;

// c.fillStyle = "red";

// c.fillRect(50,25,200,65);

//使用drawImage()方法

// c.moveTo(5,5);

// c.lineTo(45,45);

// c.lineWidth = 8;

// c.lineCap = "round";

// c.stroke();

// // 定义一个变换

// c.translate(50,100);

// c.rotate(-45*Math.PI/180);

// c.scale(10,10)

// c.drawImage(c.canvas,0,0,50,50,0,0,50,50);

// // 画布静态截图

// var img = document.createElement("img");

// img.src = canvas.toDataURL();

// document.body.appendChild(img);

//使用ImageData实现动态模糊

// function smear(c, n, x, y, w, h) {

// var pixels = c.getImageData(x,y,w,h);

// // 如果需要输出缓冲区,可以以如下方式创建一个新的同样尺寸的ImageData对象

// // var output_pixels = c.createImageData(pixels);

// var width = pixels.width, height = pixels.height;

// // data变量包含所有原始的像素信息:从左到右,从上到下

// var data = pixels.data;

// // 每一行第一个像素之后的像素都通过将其色值替换成

// // 其色值得1/n +元色素值的m/n

// var m = n-1;

// for(var row = 0; row < height; row++) {

// var i = row*width*4 + 4; //每行第二个元素的偏移量

// for(var col = 1; col < width; i +=4) {

// data[i] = (data[i] + data[i-4]*m)/n; //像素中红色分量

// data[i+1] = (data[i+1] + data[i-3]*m)/n;

// data[i+2] = (data[i+2] + data[i-2]*m)/n;

// data[i+3] = (data[i+3] + data(i-1)*m)/n;

// }

// }

// // 现将涂抹过的图片数据复制回画布相同的位置

// c.putImageData(pixels,x,y);

// }

// 检测一个鼠标事件是否发生在当前路径上

// 如果鼠标事件发生指定的CanvasRenderingContext2D当前路径上则返回true

// function hitpath(context,event) {

// // 从canvas对象中获取canvas元素

// var canvas = context.canvas;

// // 获取画布尺寸和位置

// var bb = canvas.getBoundingClientRect();

// // 将鼠标事件坐标通过转换和缩放变换成画布坐标

// var x = (event.clientX-bb.left)*(canvas.width/bb.width);

// var y = (event.clientY-bb.top)*(canvas.height/bb.height);

// // 用这些变换后的坐标来调用isPointInPath()方法

// return context.isPointInPath(x,y);

// }

// // hitpath事件处理

// canvas.onclick = function(event) {

// if (hitpath(this.getContext("2d"),event)) {

// alert("Hit!");

// }

// };

// 检测鼠标事件触发点的元素是否绘制过了

// 如果指定的鼠标事件点下的像素不是透明的则返回true

// function hitpath(context,event) {

// var canvas = context.canvas;

// var bb = canvas.getBoundingClientRect();

// // 将鼠标事件坐标通过转换和缩放变换成画布坐标

// var x = (event.clientX-bb.left)*(canvas.width/bb.width);

// var y = (event.clientY-bb.top)*(canvas.height/bb.height);

// var pixels = c.getImageData(x,y,1,1);

// for(var i = 3; i < pixels.length;i+=4) {

// if (pixels.data[i] !== 0) return true;

// }

// return false;

// }