canvas学习笔记(三)

现在来看看用canvas来绘制一张已经存在的图片

var canvas = document.getElementById('example2');
var ctx2 = canvas.getContext('2d');
var img = new Image();
img.onload = function(){
canvas.width = img.width;
canvas.height = img.height;
ctx2.drawImage(img,0,0);
}
img.src = "img.jpg";

ctx2.drawImage(img,0,0) 是在画布(0,0)的位置上画出img.jpg这张图像,当img没有完全载入的时候,drawImage已经执行会导致后面的脚本全部停止运行,所以给了img一个onload事件来保证drawImage的时候已经完全载入了img。

< !DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<style type="text/css">
canvas{
	border:1px solid #000;
	display:block;
	margin:0 auto;
}
</style>
<body>
<a href="javascript:rotate('left')">向左转</a><a href="javascript:rotate('right')">像右转</a><a href=""></a>
<canvas id="example2" width="200" height="200">
This text is displayed if your browser does not support HTML5 Canvas.
</canvas>
<script type="text/javascript">
	var canvas = document.getElementById('example2');
	var ctx2 = canvas.getContext('2d');
	var img = new Image();
	img.onload = function(){
		canvas.width = img.width;
		canvas.height = img.height;
		ctx2.drawImage(img,0,0);
	}
	img.src = "img.jpg";
	function rotate(direct){
		var temp;
		var type = canvas.getAttribute("type");
		temp = canvas.height;
		canvas.height = canvas.width;
		canvas.width = temp;
		if(direct == "right"){
			switch(type){
				case null:
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute("type",1);
					break;
				case "0":
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute("type",1);
					break;
				case "1":
					ctx2.translate(canvas.width,canvas.height);
					ctx2.rotate(Math.PI);
					canvas.setAttribute("type",2);
					break;
				case "2":
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute("type",3);
					break;
				case "3":
					ctx2.translate(0,0);
					ctx2.rotate(Math.PI*2);
					canvas.setAttribute("type",0);
					break;
			}
		}else if(direct == "left"){
			switch(type){
				case null:
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute("type",3);
					break;
				case "0":
					ctx2.translate(0,canvas.height);
					ctx2.rotate(Math.PI*3/2);
					canvas.setAttribute("type",3);
					break;
				case "1":
					ctx2.translate(0,0);
					ctx2.rotate(Math.PI*2);
					canvas.setAttribute("type",0);
					break;
				case "2":
					ctx2.translate(canvas.width,0);
					ctx2.rotate(Math.PI/2);
					canvas.setAttribute("type",1);
					break;
				case "3":
					ctx2.translate(canvas.width,canvas.height);
					ctx2.rotate(Math.PI);
					canvas.setAttribute("type",2);
					break;
			}
		}
		ctx2.drawImage(img,0,0);
	}
</script>
</body>
</html>

上面是我写的一个canvas旋转图片的例子(只是粗略的实现了功能)

Posted in CSS, HTML5, javascript by qbaty at 四月 6th, 2010.
Tags: , , ,

Leave a Reply