重复canvas元素
canvas绘制图像
drawimage() 方法在画布上绘制图像、画布或视频。
drawimage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。
context.drawimage(img,x,y); 在canvas的位置
context.drawimage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度:
context.drawimage(img,sx,sy,swidth,sheight,x,y,width,height); 前四个设定目标元素的位置和宽高,后四个设定canvas元素定位位置宽和高
canvas渐变
线性渐变
createlineargradient(x1,y1,x2,y2);线性渐变必须在填充渐变区域里定义渐变,否则没有效果。
把线性渐变保存在一个变量bg里,bg.addcolorstop(numbe(小数),颜色); 把变量填充fillstyle.
径向渐变
createradialgradient(x1, y1, r1, x2, y2, r2); 起始点的坐标和半径 结束点的坐标和半径
canvas 阴影
shadowcolor shadowoffsetx shadowoffsety shadowblur
canvas剪切
clip() 方法从原始画布中剪切任意形状和尺寸。
提示:一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。您也可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法)。
canvas 合成(新像素和旧像素的合并方式)
默认source-over 常用source-over destination-over copy
将canvas内容导出 (注意:受同源策略限制,需开启服务器,否则会报错)canvas.todataurl();是canvas自身的方法不是上下文对象。将canvas的内容抽取成一张图片以base64的编码格式,将canvas的内容放入ing元素里
获取canvas像素信息
getimagedata() 方法返回 imagedata 对象,该对象拷贝了画布指定矩形的像素数据。
对于 imagedata 对象中的每个像素,都存在着四方面的信息,即 rgba 值:
- r - 红色 (0-255)
- g - 绿色 (0-255)
- b - 蓝色 (0-255)
- a - alpha 通道 (0-255; 0 是透明的,255 是完全可见的
getimagedata(x,y,dx,dy);//受同源策略
您也可以使用 getimagedata() 方法来反转画布上某个图像的每个像素的颜色。
var imgdata=ctx.getimagedata(10,10,50,50);
ctx.putimagedata(imgdata,10,70);
putimagedata(imgdata,x,y,dirtyx,dirtyy,dirtywidth,dirtyheight);
canvas命中检测 ispointpath(x,y)检测是否在区域内 ispointstroke(x,y)检测是否在直线上 返回 true 或 false
还可以检测当前的的像素值,如果为透明,则该点不在路径上
canvas的fill方法之“非零环绕原则nonzero”与“奇偶原则evenodd”https://www.jianshu.com/p/d4b8b5d931df