canvas手工制作叮当猫

HTML

<!DOCTYPE html>
<html>
<head>
<title>canvas叮当猫</title>
</head>
<body>
<canvas id="canvas" width="800px" height="1000px">您的浏览器不支持canvas,请升级或者更换其他浏览器!</canvas>
</body>
</html>

 

 

CSS

html {
background : #fff;
}

 

 

JS

function mlog(log){

console.log("Info: "+log);
};

function zuobiao(ctx, width, height){
ctx.fillStyle ="black";
for(var j = 0; j <= height; j+=50){
ctx.lineWidth = 1;
ctx.lineStyle = "red";
ctx.beginPath();
ctx.moveTo(0,j);
ctx.lineTo(width,j);
ctx.stroke();
}
for(var i = 0; i <= width; i+=50){
ctx.lineWidth = 1;
ctx.lineStyle = "#FF0000";
ctx.beginPath();
ctx.moveTo(i,0);
ctx.lineTo(i,height);
ctx.stroke();
}
for(var i = 0; i <= width; i+=50){
for(var j = 0; j <= height; j+=50){
ctx.font="12px Arill";
ctx.beginPath();
ctx.fillText(i+","+j, i, j);
ctx.stroke();
}
}
}

(function(){
mlog("Hi,I'm vanliga!");
var ctx = init();

//左手
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(654, 543, 52, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();
//双脚
BezierEllipse2(ctx, 270, 720, 98, 52, 5, "black", "");
BezierEllipse2(ctx, 530, 720, 98, 52, 5, "black", "");
//身体
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.lineCap = "around";
ctx.fillStyle = "#00A0E9";
ctx.beginPath();
ctx.moveTo(568,445);
ctx.quadraticCurveTo(630,478,650,500);
ctx.quadraticCurveTo(650,559,600,550);
ctx.quadraticCurveTo(579,540,550,518);
ctx.quadraticCurveTo(553,510,550,480);
ctx.quadraticCurveTo(553,510,550,518);
ctx.quadraticCurveTo(557,510,548,650);
ctx.quadraticCurveTo(579,680,570,700);
ctx.quadraticCurveTo(500,720,440,700);
ctx.quadraticCurveTo(400,650,360,700);
ctx.quadraticCurveTo(300,720,230,700);
ctx.quadraticCurveTo(224,675,250,650);
ctx.quadraticCurveTo(253,510,259,480);
ctx.quadraticCurveTo(253,510,255,520);
ctx.quadraticCurveTo(253,510,100,400);
ctx.quadraticCurveTo(120,360,150,350);
ctx.quadraticCurveTo(203,380,220,375);
ctx.quadraticCurveTo(203,380,568,445);
ctx.stroke();
ctx.fill();
BezierEllipse2(ctx, 400, 600, 110, 71, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 400, 600, 110, 71, 5, "black", "");
ctx.lineWidth = 4;
ctx.beginPath();
ctx.moveTo(325,600);
ctx.quadraticCurveTo(400,610,475,600);
ctx.quadraticCurveTo(400,700,325,600);
ctx.stroke();
//脸
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#00A0E9";
ctx.beginPath();
ctx.arc(400, 300, 200, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();

ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(400, 340, 160, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();

//眼睛
BezierEllipse2(ctx, 345, 200, 50, 65, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 345, 200, 50, 65, 5, "black", "");
BezierEllipse2(ctx, 455, 200, 50, 65, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 455, 200, 50, 65, 5, "black", "");

BezierEllipse2(ctx, 365, 210, 20, 30, 5, "#000", "fill");
BezierEllipse2(ctx, 435, 210, 20, 30, 5, "#000", "fill");

BezierEllipse2(ctx, 375, 210, 8, 15, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 425, 210, 8, 15, 5, "#FFFFFF", "fill");

//鼻子
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#E60012";
ctx.beginPath();
ctx.arc(400, 280, 40, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();

ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(390, 270, 16, 0, 2*Math.PI, true);
ctx.fill();

ctx.beginPath();
ctx.moveTo(400, 320);
ctx.lineTo(400, 460);
ctx.stroke();

//嘴
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.lineCap = "round";
ctx.beginPath();
ctx.moveTo(280,410);
ctx.bezierCurveTo(360,480,440,480,520,410);
ctx.stroke();

//左胡子
ctx.moveTo(360,320);
ctx.lineTo(270,260);
ctx.stroke();
ctx.moveTo(360,350);
ctx.lineTo(250,340);
ctx.stroke();
ctx.moveTo(360,380);
ctx.lineTo(260,400);
ctx.stroke();

//右胡子
ctx.moveTo(440,320);
ctx.lineTo(530,260);
ctx.stroke();
ctx.moveTo(440,350);
ctx.lineTo(550,340);
ctx.stroke();
ctx.moveTo(440,380);
ctx.lineTo(540,400);
ctx.stroke();

//围巾
ctx.lineWidth = 7;
ctx.lineStyle="black";
ctx.fillStyle = "#E60012";
ctx.beginPath();
ctx.moveTo(240,427);
ctx.quadraticCurveTo(400,530,560,427);
ctx.quadraticCurveTo(570,437,560,447);
ctx.quadraticCurveTo(400,560,240,450);
ctx.quadraticCurveTo(230,437,242,427);
ctx.stroke();
ctx.fill();

//铃铛
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FDD000";
ctx.beginPath();
ctx.arc(400, 530, 40, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();

ctx.lineWidth = 8;
ctx.lineStyle="black";
ctx.lineCap = "around";
ctx.fillStyle = "#FDD000";
ctx.beginPath();
ctx.moveTo(365,510);
ctx.quadraticCurveTo(400,498,435,510);
ctx.quadraticCurveTo(450,510,445,518);
ctx.quadraticCurveTo(400,505,355,518);
ctx.quadraticCurveTo(350,510,365,510);
ctx.stroke();
ctx.fill();

ctx.lineWidth = 8;
ctx.lineStyle="black";
ctx.fillStyle = "#7D6B56";
ctx.beginPath();
ctx.arc(400, 542, 8, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();

ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.beginPath();
ctx.moveTo(400, 554);
ctx.lineTo(400, 570);
ctx.stroke();


//右手
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(100, 350, 52, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();


//zuobiao(ctx, 800, 1000);

})();


function init(){
var can = document.getElementById("canvas");
//can.style.border = "1px solid red";
var ctx = can.getContext("2d");
return ctx;
}

//椭圆的绘制方法
/*context为Canvas的2D绘图环境对象,
x为椭圆中心横坐标,
y为椭圆中心纵坐标,
a为椭圆横半轴长,
b为椭圆纵半轴长*/
function BezierEllipse2(ctx, x, y, a, b, lineWidth, color, method)
{
var k = .5522848,
ox = a * k, // 水平控制点偏移量
oy = b * k; // 垂直控制点偏移量
if(method == "fill"){
ctx.fillStyle = color;
}
else{
ctx.lineWidth = lineWidth;
ctx.storkeStyle = color;
}
ctx.beginPath();
//从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线
ctx.moveTo(x - a, y);
ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
ctx.closePath();
if(method == "fill"){
ctx.fill();
}
else{
ctx.stroke();
}

};

 

转载于:https://www.cnblogs.com/vanliga/p/4840548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值