前端最基础的就是 HTML+CSS+Javascript
。掌握了这三门技术就算入门,但也仅仅是入门,如今前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS
),本着提高技术水平,打牢基础知识的中心思想,咱们开课啦(每周四)。css
canvas
是 HTML5
新增长的功能,用于操做绘制图片。
能够用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。
主要操做2D图形。也能够绘制3D图形。html
ctx.globalCompositeOperation = 'destination-out'
国庆头像。蹭热点,请给我一面国旗@微信官方、democss3
<canvas id="canvas" width="300" height="300"></canvas>
web
ID
来方便查找height
为画布真实高度。单位:px。默认高度 150px。width
为画布真实宽度。单位:px。默认宽度 300px。height
对应标签上的 height 属性width
对应标签上的 width 属性ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, 300, 300)
getContext()
返回绘制上下文环境对象。咱们须要使用返回的对象操做图形。toBlob()
将图片输出为Blob类型、异步toDataURL()
将图片输出为DataURL类型、同步ctx = canvas.getContext(contextType[, contextAttributes])
chrome
contextType 须要返回的对象类型canvas
'2d'
返回 CanvasRenderingContext2D
对象,用来进行2D绘制。'webgl'
或'experimental-webgl'
返回WebGLRenderingContext(WebGL渲染上下文)对象,用于使用 webgl 进行 3D绘制。提供硬件3D加速渲染。对应的WebGL1(OpenGL ES 2.0) 'webgl2'
返回 WebGL2RenderingContext
对象,也是用于3D绘制。只不过对应 WebGL2(OpenGL ES 3.0) 'bitmaprenderer'
返回 ImageBitmapRenderingContext
contextAttributes 可选segmentfault
alpha
开启透明该操做是异步的,因此须要传入callback。api
callback
处理完成的回调函数。回调的第一个参数为blob。mimeType
须要转换的图片类型,默认为image/png
。quality
图片质量,默认为0.92
。该操做是同步的,因此大图片会卡。data:[<mime type>][;base64],<data>
DataURL的格式。跨域
mimeType
须要转换的图片类型,默认为image/png
。quality
图片质量,默认为0.92
。Access-Control-Allow-Origin
设置图片的crossOrigin
var img = new Image(); img.crossOrigin = ''; img.onload = function () {}; img.src = url;
ctx.lineWidth
宽度。默认值:1,能够有小数。单位:pxctx.lineCap
端点样式,路径起点和终点
lineWidth
为直径画圆。lineWidth
是同样,长度度是 lineWidth/2
。ctx.lineJoin
转角样式,路径中的转折点
miterLimit
能够限制尖头最长尺寸,长度大于限制值的会使用bevel
来处理。lineWidth
为直径画圆。ctx.miterLimit
尖角限制阈值,针对线条粗角度小的状况。默认值:10。若是ctx.lineJoin=miter
时,长度超出则使用平角显示,若是长度不超出使用尖角显示。ctx.lineDashOffset
虚线起始偏移量ctx.setLineDash()
设置虚线数值,数组。
[5]
等价于[5,5]
。[5,5]
等价于实线5px虚线5px[1,2,3]
等价于[实线1px,虚线2px,实线3px][1,2,3,4]
等价于[实线1px,虚线2px,实线3px,虚线4px]ctx.getLineDash()
获取虚线数值,数组。font
字号、字体。
ctx.font='20px monospace'
textAlign
水平对齐方式。start(默认值)、end、left、right、center。 测试地址
start
表示指定的坐标为开始坐标(左边、direction 时会自动变化)。end
表示指定的坐标为结束坐标(右边、direction 时会自动变化)。left
表示指定的坐标为左边坐标。right
表示指定的坐标为右边坐标。center
表示指定的坐标为中心点。textBaseLine
基线对齐方式。top、hanging、middle、alphabetic(默认值)、ideographic、bottom。测试地址
direction
控制文本方向ctx.fillStyle
填充颜色。默认为#000
黑色ctx.fillRect()
填充指定区域
ctx.fillRect(x, y, width, height);
ctx.fillText()
在指定区域绘制文本
ctx.fillText(text, x, y [, maxWidth]);
ctx.fill()
填充,须要有路径,会自动闭合路径
fillRule
为填充规则 nonzero
、evenodd
。搞懂SVG/Canvas中nonzero和evenodd填充规则 张鑫旭 ctx.strokeStyle
描边颜色。默认为#000
黑色ctx.strokeRect()
描边指定区域
ctx.strokeRect(x, y, width, height);
ctx.strokeText()
在指定区域绘制文本描边
ctx.strokeText(text, x, y [, maxWidth]);
ctx.stroke()
描边,须要有路径,会自动闭合路径
ctx.shadowBlur
阴影模糊大小,默认值:0ctx.shadowColor
阴影颜色,默认值:透明ctx.shadowOffsetX
阴影X轴偏移量,默认值:0ctx.shadowOffsetY
阴影Y轴偏移量,默认值:0ctx.beginPath()
开启一个新路径ctx.closePath()
关闭路径绘制,区别在于描边时。ctx.moveTo()
移动路径的起始点ctx.moveTo(x, y);
ctx.lineTo()
绘制直线路径到指定点ctx.lineTo(x, y);
ctx.bezierCurveTo()
绘制贝塞尔曲线路径到指定点ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
ctx.quadraticCurveTo()
绘制二次贝塞尔曲线路径到指定点ctx.quadraticCurveTo(cpx, cpy, x, y);
ctx.arc()
圆弧路径ctx.arc(x, y, r, startAngle, endAngle [, anticlockwise]);
对应 圆心、半径、起始角度(弧度)、结束角度(弧度)、绘制方向(默认 false 顺时针)ctx.arcTo()
圆弧路径ctx.arcTo(x1, y1, x2, y2, radius);
ctx.rect()
矩形路径ctx.rect(x, y, width, height);
ctx.ellipse()
椭圆弧路径ctx.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
ctx.clip()
裁剪路径。规定路径只能够在这个区域内。ctx.clip();
、ctx.clip(fillRule);
、ctx.clip(path, fillRule);
这里就要说一下我以前的文章了(蹭热点,请给我一面国旗@微信官方),使用这个功能来实现css3变换以后,转换到canvas上。测试地址
变化测试地址
ctx.rotate()
旋转ctx.rotate(angle);
,angle是弧度,angle = deg / 180 * Math.PIctx.scale()
缩放ctx.scale(x, y);
默认点是(0, 0)。默认值是(1, 1)。放大来说css和canvas是同样的。不会影响以前的绘制。ctx.translate()
位置ctx.translate(x, y);
默认点是(0, 0)。默认值是(0, 0)。使用来讲和css的差距很大。不会进行坐标轴叠加。用于修改中心点操做。ctx.transform()
矩阵变化叠加ctx.setTransform()
矩阵变化不叠加
ctx.resetTransform()
重置矩阵变化ctx.getTransform()
获取当前的矩阵变化值。ctx.createLinearGradient()
线性渐变ctx.createLinearGradient(x0, y0, x1, y1);
ctx.createRadialGradient()
径向渐变ctx.createRadialGradient(x0, y0, r0, x1, y1, r1)
ctx.createPattern()
图案ctx.createPattern(image, repetition);
HTMLImageElement
、HTMLVideoElement
、HTMLCanvasElement
、CanvasRenderingContext2D
、ImageBitmap
、ImageData
、Blob
。repeat
默认 平铺、repeat-x
水平平铺、repeat-y
垂直平铺、no-repeat
不重复。ctx.drawImage()
绘制图片到canvas上
ctx.drawImage(image, dx, dy);
图片从cavnas坐标开始绘制。ctx.drawImage(image, dx, dy, dWidth, dHeight);
图片从canvas坐标开始绘制,绘制宽高。ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
图片截取图片的坐标宽高,绘制到canvas的坐标上。ctx.createImageData()
建立一个图片数据对象,四位描述一个像素点为rgba。ctx.getImageData()
获取当前canvas的数据对象ctx.putImageData()
将数据对象绘制到canvas上ctx.clearRect()
清除指定区域内的全部内容ctx.measureText()
测量文本所占据的宽度
ctx.measureText(text)
ctx.isPointInPath()
点是否在路径内ctx.isPointInPath(x, y);
ctx.isPointInPath(x, y, fillRule);
ctx.isPointInPath(path, x, y);
ctx.isPointInPath(path, x, y, fillRule);
ctx.isPointInStroke()
点是否在路径上ctx.isPointInStroke(x, y);
ctx.isPointInStroke(path, x, y);
ctx.save()
保存绘制状态,入栈ctx.restore()
恢复绘制状态,出栈ctx.canvas
dom对象的引用ctx.drawFocusIfNeeded()
ctx.scrollPathIntoView()