Canvas绘图小结

本文全面介绍Web绘图技术,包括统计图表Echarts、实时走势图Canvas、在线画图板魔猴、HTML5游戏Three.js等。深入探讨Canvas绘图,涵盖图形绘制、渐变效果、文字处理、图片操作等核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目前web绘图技术一览

①统计图表 echats
②实时走势图 canvas
③在线画图板 魔猴
④HTML5游戏 three.js
⑤可用绘图技术:
canvas 位图,单位是px 2D图像和图形
svg 矢量图
webGL 3D图像和图形

二、canvas 常规图形绘制

本文我们先就Canvas绘图做一个小结。

1.定义创建 canvas
<canvas width="600" height="400" id="canvas"></canvas>	// 在Html中创建画布,并设定画布尺寸

javascript:   
var canvas = document.getElementById("canvas");//获取画布对象(画笔)	Context上下文	content内容 
		var context = canvas.getContext("2d");
2.1矩形
	ctx.fillRect(x,y,w,h);		// 实心矩形
	ctx.fillStyle = "#FFF";
	ctx.strokeRect(x,y,w,h);	// 空心矩形
	ctx.strokStyle = "#FFF";
	ctx.linewidth = 10;			// 线条宽度
2.2圆形
// ctx.arc(圆心x, 圆心y, 半径r, 起始角度位置, 重点角度位置, counterclockwise);
		// counterclockwise : 可选参数,默认顺时针绘制,false;
		ctx.beginPath();
		ctx.arc(280,60,50,0,Math.PI * 2);
		ctx.closePath();
		ctx.stroke()
3.线性渐变
	// 创建一个渐变对象 ctx.createLinearGradient(x0,y0,x1,y1),
	var grad = cxt.createLinearGradient(0,0,400,300);
	// 设置渐变颜色及偏移度
	grad.addColorStop(0,"red");
	grad.addColorStop(0.3,"yellow");
	grad.addColorStop(0.6,"pink");
	grad.addColorStop(1,"blue");
	ctx.fillStyle = grad;
	ctx.fillRect(0,0,400,300);
4.扇形渐变
	// 创建渐变对象:ctx.createRadialGradient(x0,y0,r0,x1,y1,r1)
	var grad = cxt.createRadialGradient(150,150,0,150,150,200);
	grad.addColorStop(0,"red");
	grad.addColorStop(0.5,"blue");
	grad.addColorStop("1","yellow");
	ctx.fillStyle = grad;
	ctx.fillRect(0,0,400,400);
5.绘制文字
	// 设置文字的font属性
	ctx.font = "bold 48px 宋体";
	// 绘制文字
	// context.fillText(text,x,y,maxWidth);
	ctx.strokeRect(100,100,200,200)
	ctx.fillText("TXT_01",100,100,50);
	ctx.strokeText("TXT_02",200,200);
6.绘制文字的水平对齐
	// 可以设置文字对齐
	ctx.textAlign = "center";
	ctx.textAlign = "right";
	ctx.textAlign = "left";
	ctx.textAlign = "end";
	ctx.textAlign = "start";
	ctx.textBaseline = "alphabetic";	// 文本基线
7.路径绘制
	// 1.创建路径
	ctx.beginPath();
	// 2.绘制形状
	ctx.rect(10,10,100,100);
	// 3.绘制
	ctx.stroke();	// context.fill();
	// 4.关闭当前路径
	ctx.closePath();

	/* 路径绘图 */
	ctx.beginPath();		// 开始
	ctx.moveTo(10,10);		// 起始点
	ctx.lineTo(100,10);		// 转折点
	ctx.lineTo(100,100);
	ctx.lineTo(200,100);
	ctx.lineTo(300,200);
	ctx.closePath();		// 结束
	ctx.lineWidth = 2;		// 线条宽度
	ctx.fill()				// 填充

三、canvas 图片与图形绘制

1.canvas 引入图片
	var myimg = new Image();
	myimg.src = "imgs/1.jpg";
	myimg.onload = function(){
		context.drawImage(myimg,10,10,300,300);
	}
	/*
		画布中不显示图片的原因:
		先加载canvas画布,在画布中加载图片
 解决办法:
	 	window.onload - 页面加载完毕
	 	img.onload    - 保证图片先加载完毕    推荐使用
	 */
2.canvas 图片平铺
	var myimg = new Image();
	myimg.src = "imgs/1.jpg";
	myimg.onload = function(){
		var ptn = context.createPattern(myimg,"repeat");
		context.fillStyle = ptn;
		context.fillRect(0,0,canvas.width,canvas.height);
	}
3.canvas 图片切割
	var myimg = new Image();
	myimg.src = "imgs/1.jpg";
	myimg.onload = function(){
		context.drawImage(myimg,0,0);
	}
	//截图 => clip()   属性创建一个路径
	context.beginPath();
	context.arc(180,70,50,0,Math.PI*2);		// context.rect(120,20,150,100);
	context.closePath();
	context.clip();
4.canvas 绘制原地旋转图片
	var img = new Image();
	img.src = "imgs/hero1.png";
	img.onload = function(){
	var deg = 0;
	setInterval(function(){
		cxt.clearRect(0,0,w,h);		// 清除画布
		cxt.save();		// 存储API
		deg += 5;
		cxt.translate(img.width/2,img.height/2);	// 新设原点
		cxt.rotate(deg * Math.PI/180);				// 旋转角度
		//绘制图像设置绘制图像时的坐标位置
		cxt.drawImage(img,-(img.width/2),-(img.height/2));
		cxt.restore();	// 存储API
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值