canvas在线画图

一、项目演示

在线体验:你画我猜

在这里插入图片描述

二、项目复现

项目结构:
在这里插入图片描述
小黄人背景图:xhr.jpg
在这里插入图片描述

画布:huabu.js

var canvas;var context;var img1=[];var canX;var canY;$(function(){canvas=$('#cavs')[0];context=canvas.getContext('2d');canX=canvas.offsetLeft;canY=canvas.offsetTop;var paint=Object.create(Line);context.lineCap="round";context.lineJoin="round";$('#Line').click(function(event){context.lineWidth=$('#thickness').val();paint=Object.create(Line);context.strokeStyle=$("#color").val();console.log(paint);});$('#xpc').click(function(event){context.lineWidth=$('#thickness').val();paint=Object.create(xpc);context.strokeStyle="#FFF";console.log(paint);});$('#qingping').click(function(event){context.clearRect(0,0,canvas.width,canvas.height);});$('#chexiao').click(function(){context.putImageData(img1.pop(),0,0);});paint.draw();$("#xiazai").click(function(event){xiazai.draw();});});var Line={name:"line",draw:function(){var painting=false;var p_x;var p_y;console.log(context.strokeStyle);$('#cavs').mousemove(function(e){if(painting===true){var x=e.pageX;var y=e.pageY;context.lineTo(x-canX,y-canY);context.stroke();}});$('#cavs').mousedown(function(e){painting=true;p_x=e.pageX;p_y=e.pageY;context.beginPath();context.moveTo(p_x-canX,p_y-canY);$('#cavs').css('cursor','pointer');var imgData=context.getImageData(0,0,canvas.width,canvas.height);img1.push(imgData);});$('#cavs').mouseup(function(e){painting=false;context.closePath();$('#cavs').css('cursor','');});$('#cavs').mouseleave(function(e){painting=false;context.closePath();$('#cavs').css('cursor','');});$("#color").change(function(event){context.strokeStyle=$(this).val();});$("#cuxi").change(function(event){context.lineWidth=$(this).val();});}}
var xpc={name:"xpc",draw:function(){var painting=false;var p_x;var p_y;console.log(context.strokeStyle);ontext.lineWidth=$("#cuxi").val();$('#cavs').mousemove(function(e){if(painting===true){var x=e.pageX;var y=e.pageY;context.lineTo(x-canX,y-canY);context.stroke();}});$('#cavs').mousedown(function(e){painting=true;p_x=e.pageX;p_y=e.pageY;context.beginPath();context.moveTo(p_x-canX,p_y-canY);$('#cavs').css('cursor','pointer');var imgData=context.getImageData(0,0,canvas.width,canvas.height);img1.push(imgData);});$('#cavs').mouseup(function(e){painting=false;context.closePath();$('#cavs').css('cursor','');});$('#cavs').mouseleave(function(e){painting=false;context.closePath();});$("#cuxi").change(function(event){context.lineWidth=$(this).val();});}}
var xiazai={draw:function(){var type='png';var imgData=$('#cavs')[0].toDataURL(type);var _fixType=function(type){type=type.toLowerCase().replace(/jpg/i,'jpeg');var r=type.match(/png|jpeg|bmp|gif/)[0];return 'image/'+r;};imgData=imgData.replace(_fixType(type),'image/octet-stream');var saveFile=function(data,filename){var save_link=document.createElementNS('http://www.w3.org/1999/xhtml','a');save_link.href=data;save_link.download=filename;var event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);save_link.dispatchEvent(event);};var filename='xiaoguangren'+(new Date()).getTime()+'.'+type;saveFile(imgData,filename);}}

jquery-3.4.1.min.js

页面:index.html

<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>你画我猜</title>
		<script src="js/jquery-3.4.1.min.js"></script>
		<script type="text/javascript" src="js/huabu.js"></script>
		<style type="text/css">
			#bj {
				background: url("img/xhr.jpg");/*背景图*/
			}

			#cavs {
				border: 1px solid #CC6600;
				border-radius: 25px;
				box-shadow: 10px 10px 5px #888888;
			}

			#kuang {
				margin-left: 40px;
				width: 1100px;
				height: 50px;
				margin-top: 15px;
				border-radius: 25px;
				box-shadow: 10px 10px 5px #888888;
			}

			#k1 {
				float: left;
				margin-left: 43px;
			}

			.button {
				background-color: #F9D448;
				/* 土黄色 */
				border: none;
				color: white;
				padding: 6px 15px;
				text-align: center;
				border-radius: 25px;
				text-decoration: none;
				display: inline-block;
				font-size: 16px;
				margin: 4px 2px;
				cursor: pointer;
				-webkit-transition-duration: 0.4s;
				/* Safari */
				transition-duration: 0.4s;
			}

			.button2:hover {
				box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
			}
		</style>
	</head>
	<body id="bj">
		<canvas id="cavs" width="1200" height="542"></canvas><br />
		</div>
		<div id="kuang">
			<div id="k1">
				<input type="color" id="color" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="保存" id="baocun" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="下载" id="xiazai" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="撤销" id="chexiao" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="清屏" id="qingping" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="线条" id="Line" class="button button2">
			</div>
			<div id="k1">
				<input type="button" value="橡皮" id="xpc" class="button button2">
			</div>
			<div id="k1">
				<input class="button button2" type="range" id="cuxi" value="3" min="0" max="10">
			</div>
		</div>
	</body>
</html>

效果图:
在这里插入图片描述

发布了195 篇原创文章 · 获赞 335 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/cungudafa/article/details/102892782