canvas基本使用(获取画布、绘制矩形、清除屏幕内容、动画、绘制不规则图形、圆形、虚线、绘制文字、颜色渐变、设置阴影、渲染图片、变形偏移、canvas文档、Konva)

本文详细介绍了HTML5 Canvas的基本用法,包括获取画布、绘制矩形、圆形、不规则图形、文字、颜色渐变、阴影效果、图片渲染及变形偏移等操作。同时,讲解了如何实现canvas动画和像素化效果,并展示了html节点转canvas并导出为base64图片的实现方法。此外,还涉及到html2canvas库的使用,用于将DOM转换为canvas并下载为图片。

目录

canvas使用

获取画布

var canvas = document.getElementById(canvasID)

vat ctx = canvas.getContext('2d')

绘制矩形

ctx.fillStyle = 'red'

ctx.fillRect(100,100,200,50)

ctx.strokeStyle = 'blue'

ctx.strokeRect(300,100,200,50)

清除屏幕内容(动画)

ctx.clearRect(0,0,600,600)

像素化

绘制不规则图形

ctx.beginPath()

ctx.moveTo(100,100)

ctx.lineTo(200,200);

ctx.closePath()

ctx.strokeStyle = 'yellow'

ctx.stroke()

ctx.fillStyle = 'blue'

ctx.fill()

绘制圆形

ctx.arc(x,y,radius,start,end,anticlockwise)

设置绘制属性(线条属性、虚线等)

ctx.globalAlpha = 0.1

ctx.lineWidth = 1

ctx.lineCap = ’round‘

ctx.lineJoin = 'round'

ctx.setLineDash([4,20,...,])

绘制文字

ctx.font='30px 宋体'

ctx.fillText(str,x,y)

ctx.textAlign = 'center'

颜色渐变

let linear = ctx.createLinearGradient(100,100,200,200)

linear.addColorStop(0,'red')

设置阴影

ctx.shadowOffsetX|Y = 1

ctx.shadowBlur = 20

ctx. shadowColor = 'red'

渲染图片

ctx.drawImage(img,x0,y0,w0,y0,x1,y1,w1,h1)

变形偏移

ctx.save()

ctx.restore()

ctx.translate(x,y)

ctx.rotate(deg)

ctx.scale(x,y)

ctx.transform(a,b,c,d,e,f)

canvas.toDataURL(type,encoderOptions) 

压缩图片

视频截图

ctx.getImageData(x,y,width,height)

ctx.putImageData(ImageData,x,y)

图片灰度处理

html节点转canvas转base64图片下载示例(html2canvas)

示例使用方法解析

canvas相关库

Konva

示例

canvas文档


canvas使用

canvas标签的宽和高使用属性设置,用css的样式设置会导致画布失真。

获取画布

var canvas = document.getElementById(canvasID)

得到画布上下文,有两个分别为2d和3d的上下文,

vat ctx = canvas.getContext('2d')

选择2d的上下文,所有的图像绘制都是通过ctx属性或者事方法进行设置,和canvas标签没有关系了 。

绘制矩形

ctx.fillStyle = 'red'

设置下次填充内容的颜色为红色。注意要在绘制内容前设置颜色不然无法生效。

ctx.fillRect(100,100,200,50)

绘制填充矩形,前2个参数为x,y轴坐标,后2个参数为x、y轴方向的长度(x轴为水平向右,y轴垂直向下)。

ctx.strokeStyle = 'blue'

设置下次绘制线条颜色为蓝色。注意要在绘制内容前设置颜色不然无法生效。

ctx.strokeRect(300,100,200,50)

绘制矩形边框,前2个参数为x,y轴坐标,后2个参数为x、y轴方向的长度(x轴为水平向右,y轴垂直向下)。

清除屏幕内容(动画)

ctx.clearRect(0,0,600,600)

清除矩形范围内容,前2个参数为x,y轴坐标,后2个参数为x、y轴方向的长度。

像素化

使用canvas 绘制图片成功后就会像素化,无法从画布上再次得到这个图形(即无法修改画布内容,flash可以)。

注意canvas动画是通过清屏-更新-渲染的逻辑进行。

绘制不规则图形

每次设置完绘制的线条后需要调用ctx.stroke()绘制内容。

ctx.beginPath()

创建路径

ctx.moveTo(100,100)

设置起点坐标。

ctx.lineTo(200,200);

设置下一点坐标以及连接方式为直线。

ctx.closePath()

封闭路径,将最后一点坐标和起点坐标相连。注意用fill填充时,不写该条语句也会自动相连。

ctx.strokeStyle = 'yellow'

设置边框颜色

ctx.stroke()

通过线条绘制图形轮廓。

ctx.fillStyle = 'blue'

设置填充颜色。

ctx.fill()

通过填充路径的内容区域生成实心的图形。

绘制圆形

ctx.arc(x,y,radius,start,end,anticlockwise)

绘制圆弧,x、y为绘制圆弧的圆心;radius为半径 ;start为起始弧度(0表示x轴即水平向右);end为结束弧度(顺时针时,是按起始弧度转end-start弧度,即相差2π时绘制的是圆,逆时针旋转时,是从start弧度逆时针转到end弧度,且start、end弧度是按照顺时针的弧度,大于2π时%2π);anticlockwise为是否逆时针转,false为顺时针旋转;

// 圆点的中心坐标
var centerX = 50;
var centerY = 50;
// 圆点的半径
var radius = 5;
// 起始角度和结束角度设置为相同的值
// 使用2*Math.PI,因为我们只想画一个圆点,而不是整个圆
ctx.beginPath();
ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();

设置绘制属性(线条属性、虚线等)

ctx.globalAlpha = 0.1

设置线条的透明度,取值为0~1。

ctx.lineWidth = 1

设置线条的宽度,默认为1。

ctx.lineCap = ’round‘

设置线段末端结束方式,默认butt为方形结束,round为半圆型结束。

ctx.lineJoin = 'round'

设置线段连接处的样式,默认为miter为正常线性连接,round为连接处圆形,bevel为连接处底部为平的。

ctx.setLineDash([4,20,...,])

设置虚线,接受一个数组,数组第一位为实线长度,第二位为虚线长度即空白的长度,第三位为实线长度,以此类推,然后用数组的内容循环设置线段的虚实。

ctx.lineDashOffset = 4

设置起始的偏移量,如果设置为4,则上面从虚线即空白长度20开始。

绘制文字

ctx.font='30px 宋体'

设置字体大小和字体样式。

ctx.fillText(str,x,y)

绘制文字内容,x、y为绘制的起始坐标。

ctx.textAlign = 'center'

设置文本水平方向对齐方式,参数有start(默认)、end(文字都在起始坐标x轴左边)、center。

注意center表示基于起始坐标x轴居中,此时想让文本在整个canvas居中,设置fillText的x值为canvas的宽度一半即可。

颜色渐变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值