用html5的canvas生成图片并保存到本地

本文介绍了一种使用JavaScript在canvas上绘制可旋转箭头的方法,并通过Ajax将生成的图像发送到服务器进行保存。

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

前端的代码:

function drawArrow(angle)
{
	//Init canvas
	var canvas = $('#cv_Arrow')[0];
	var context = canvas.getContext('2d');
	var width = canvas.width;
	var height = canvas.height;
	context.clearRect(0, 0, width, height);

	//Rotate
	var distance = iconSize / 2 * Math.sqrt(2) * Math.sin(angle * Math.PI / 180 / 2) * 2;
	var degree = 180 - 45 - (180 - angle) / 2;
	var x = distance * Math.sin(degree * Math.PI / 180);
	var y = distance * Math.cos(degree * Math.PI / 180);
	context.translate(x, -y);
	var angleInRadians = angle * Math.PI / 180;
	context.rotate(angleInRadians);

	//Draw arrow
	context.fillStyle = 'rgb(0,0,0)'; //Black
	context.lineWidth = 1;
	context.strokeStyle = "#000000"; //Black
	context.lineCap = 'round'; //Circle angle
	context.lineJoin = 'round';
	context.beginPath();
	context.moveTo(iconSize / 2, border);
	context.lineTo(border, iconSize - border);
	context.lineTo(iconSize / 2, iconSize / 2);
	context.fill();
	context.stroke();
	context.closePath();
	context.save();

	context.restore();
	context.fillStyle = 'rgb(255,255,255)'; //White
	context.lineWidth = 1;
	context.strokeStyle = "#000000";
	context.lineCap = 'round';
	context.lineJoin = 'round';
	context.beginPath();
	context.moveTo(iconSize / 2, border);
	context.lineTo(iconSize - border, iconSize - border);
	context.lineTo(iconSize / 2, iconSize / 2);
	context.fill();
	context.stroke();
	context.closePath();
	context.save();

	_canvas = canvas;
}

发送到后台的代码:

for (var i = 0; i < 360; i++)
{
	drawArrow(1);

	var data = _canvas.toDataURL();

	//删除字符串前的提示信息 "data:image/png;base64,"
	var b64 = data.substring(22);

	$.ajax({ url: "RotateCanvas.aspx", data: { data: b64, name: i.toString() }, success:
			function ()
			{
		 	//alert('OK');
			}
	});
}

后台接收的代码:

if (Request["name"] != null)
{
	string name = Request["name"];
	String savePath = Server.MapPath("~/images/output/");

	try
	{
		FileStream fs = File.Create(savePath + "/" + name + ".png");
		byte[] bytes = Convert.FromBase64String(Request["data"]);

		fs.Write(bytes, 0, bytes.Length);
		fs.Close();
	}
	catch (Exception ex)
	{
	}
}

最后生成的结果:

生成图片的效果很棒,不失真,而且透明的,不需要后期处理。

UniApp H5端可以使用HTML5canvas标签来生成图片保存本地。具体实现步骤如下: 1. 在H5端页面中,首先需要在template中添加一个canvas标签,用于绘制图片: ``` <template> <canvas id="myCanvas"></canvas> </template> ``` 2. 在script中,获取canvas元素,使用canvas API进行绘制。例如,绘制一张红色的矩形: ``` <script> export default { mounted() { // 获取canvas元素 const canvas = document.getElementById('myCanvas') // 获取绘图上下文 const ctx = canvas.getContext('2d') // 绘制矩形 ctx.fillStyle = 'red' ctx.fillRect(0, 0, canvas.width, canvas.height) } } </script> ``` 3. 绘制完成后,可以将canvas元素转化为图片保存本地。可以使用canvas.toDataURL()方法将canvas转化为base64格式的图片数据,然后创建一个a标签设置其href属性为图片数据,再调用a标签的click()方法触发下载。例如: ``` <script> export default { mounted() { // 获取canvas元素 const canvas = document.getElementById('myCanvas') // 获取绘图上下文 const ctx = canvas.getContext('2d') // 绘制矩形 ctx.fillStyle = 'red' ctx.fillRect(0, 0, canvas.width, canvas.height) // 将canvas转化为base64格式的图片数据 const imgData = canvas.toDataURL('image/png') // 创建a标签设置href属性为图片数据 const link = document.createElement('a') link.href = imgData // 设置下载文件名 link.download = 'myImage.png' // 触发下载 link.click() } } </script> ``` 通过以上步骤,就可以在UniApp H5端使用canvas生成图片保存本地了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值