Skip to content

Latest commit

 

History

History
71 lines (56 loc) · 2.52 KB

canvas旋转图片(javascript).md

File metadata and controls

71 lines (56 loc) · 2.52 KB
layout title date tags comments
post
canvas旋转图片(javascript)
2013/03/06 10:29
canvas
true

最近在项目中需要用canvas旋转图片,这方面一开始也比较不懂。找了很多的资料才搞定这个问题。主要用到了三个函数,translate、rotate、drawImage。

  • translate(x,y):移动画布坐标系统,x和y表示水平和竖直方向的偏移量。
  • rotate(reg):旋转图片,reg表示旋转的度数。比如:Math.PI/4 表示为45。
  • drawImage(source,sx,sy,sh,sw,dx,dy,dh,dw):将图片加载到画布上。source表示的图片的对象,sx和sy表示距图片圆点的偏移量,sh和sw表示加载图片的长度和宽度。dx和dy:距画布原点的偏移量,dh和dw:利用画布宽度和高度。

现在我们要将旋转一张图片,顺时针进行旋转。

首先要在HTML上面增加一个canvas元素

<canvas id="test" width="120" height="120"></canvas>

然后需要在JavaScript中获取这个canvas

var canvasObj = document.getElementById("test");

下面我们则要返回canvas绘图环境

var cxt = canvasObj.getContext("2d"); //2d表示用二维的方式

这时候我们要给这个画布设定一个旋转中心点。不过这个地方要重点说一下,图片一般都是长方形的。如果画布也设置成长方形的话。旋转过程中,有一部分图片会被截取掉。所以当图片为长方形的时候,我们先要将以图片最大尺寸的边来设置画布的长度和宽度。比如一张图片是200100,那我们的画布必须是200200。这样旋转的时候,才不会被截断。

设置中心点,就是用上面说的translate方法,x和y设置成正方形的中心点。比如200200的画布,中心点则是100100

 cxt.translate(100,100);

设置好中心点以后,我需要将画布进行旋转。

 cxt.rotate((2*Math.PI)/*4); //旋转90度

然后我们增加一个图片对象。

var img = new Image(); 
img.src = "baidu_jgylogo3.gif";
img.onload = function(){
	cxt.drawImage(this,-100,-100); //-100和translate的正向100,相互抵消。从而使图片的原点和画布的原点重合。         
}

这样就完成图片旋转的功能。

代码:

var c = document.getElementById("myCanvas");  
var cxt = c.getContext("2d");  
cxt.translate(58,58);  
cxt.rotate( 2 * (Math.PI / 2));  
var img = new Image();  
img.src = "baidu_jgylogo3.gif";  
img.onload = function(){    
    cxt.drawImage(img,-58,-58);   
    cxt.save();
}