html5学习笔记三:canvas中平移,缩放,旋转等图像变换问题

1,保存与恢复问题

关键字:save / restore

save指保存save之前的canvas状态,restore恢复save保存的canvas状态。举个例子我想在canvas中隔一秒显示一个图片,那我可以先用save指令保存空白的canvas,然后在显示一张图片之后restore到空白的canvas状态,再显示下一张。

还有一个典型的代码如下,大家可以思考一下为什么要用我save和restore。注释掉save和restore之后效果为什么是上图而不是下图。

<!DOCTYPE HTML>
<html> 
<head>
<script language="javascript">
function drawTop(ctx, fillStyle){ 
    ctx.fillStyle = fillStyle;
    ctx.beginPath();
    ctx.arc(0, 0, 30, 0,Math.PI,true);
    ctx.closePath();
    ctx.fill();
} 
function draw(){
    var ctx = document.getElementById('myCanvas').getContext("2d");
    // 注意:所有的移动都是基于这一上下文。
    ctx.translate(80,80);
    for (var i=1;i<10;i++){
        <!--ctx.save();-->
        ctx.translate(60*i, 0);
        drawTop(ctx,"rgb("+(30*i)+","+(255-30*i)+",255)");
        <!--ctx.restore();-->
    }
}
window.οnlοad=function(){
    draw();
}
</script>
</head>
<body>
<canvas id="myCanvas" width="700" height="300"></canvas>
</body>
</html>


2,移动坐标空间

key word:translate(x,y) 

x表示沿x轴坐标迁移量,y是沿着y轴迁移量,坐标原点是(0,0)迁移之后是(x,y)


3,矩阵变换

key word :transform(m11,m12,m21,m22,dx,dy);

矩阵变换用于对原图像进行修改,  可以实现旋转,平移,缩放等操作

A=

m11

m21

dx 

m12

m22

dy

0

0

1

B=

X’

Y’

1

C=

X

Y

1


B=A*C=

(m11)X+(m21)Y+dX

(m12)X+(m22)Y+dy

1

实现旋转的话:transform(cosβ,sinβ,-sinβ,cosβ,0,0)


移动:eg transform(0,1,1,0,0,0)


缩放:transform(0,0.95,0.95,0,0,0)


3,缩放和旋转


keyword:scale ;rotate

scale(x,y) x:横坐标缩放系数 y:纵坐标缩放系数

rotate(β) 正值表示顺时针

<!DOCTYPE HTML>
<html>
<head>
<script language="javascript">
function draw(){
    var ctx = document.getElementById('myCanvas').getContext("2d");
    ctx.translate(200,20);
    for (var i=1;i<80;i++){
        ctx.save();
        ctx.translate(30,30);
        ctx.scale(0.95,0.95);
        ctx.rotate(Math.PI/12);
        ctx.beginPath();
        ctx.fillStyle="red";
        ctx.globalAlpha="0.4";
        ctx.arc(0,0,50,0,Math.PI*2,true);
        ctx.closePath();
        ctx.fill();
    }
}
window.οnlοad=function(){
    draw();
}
</script>
</head>
<body>
<canvas id="myCanvas" width="700" height="300"></canvas>
</body>
</html>


4,图像的组合

keyword:globalCompositOperation="x"

x可以是source-ove,destination-over,source-atop,destination-atop,source-in,destination-in,source-out,destination-out,lighter,darker表示各种效果

两个图像有重叠区域时可以用这个操作,下面代码可以运行查看效果。

<!DOCTYPE HTML>
<html>
<body>
<canvas id="myCanvas" style="border:1px solid;" width="300" height="200"></canvas>
<script type="text/javascript">
    var c=document.getElementById("myCanvas");
    var context=c.getContext("2d");
    context.fillStyle="red";
    context.fillRect(50,25,100,100);
    context.fillStyle="green";
    context.globalCompositeOperation="source-over";
    context.globalAlpha=0.5;	
    context.beginPath();
    context.arc(150,125,50,0,Math.PI*2,true);
    context.closePath();
    context.fill();
</script>
</body>
</html>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值