HTML5のキャンバスを使って画像の回転を行います。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<title>画像の回転</title>
<script type="text/javascript">
// 画像
var img01 = null;
// イメージ番号
var imgNum = 0;
// 角度
var angle = 0;
// 拡大率
var zoom = 1;
// タイマー
var timer = null;
// キャンバス取得
var canvas = null;
// コンテキスト
var ctx = null;
/*
画像の描画
*/
function DrawImage() {
// 描画中心
var posX = canvas.width / 2;
var posY = canvas.height / 2;
// 角度をラジアンに変換
var rad = angle * Math.PI / 180;
// ハムスター
var imgX = 0;
var imgY = 0;
var imgW = img01.width;
var imgH = img01.height;
var img = img01;
var imgDrawW = imgW * zoom;
var imgDrawH = imgH * zoom;
var imgPosX = posX - imgDrawW / 2;
var imgPosY = posY - imgDrawH / 2;
// キャンバスのクリア
ctx.fillStyle = '#FFFFFF';
ctx.fillRect( 0, 0, canvas.width, canvas.height );
// コンテキスト保存
ctx.save();
// 回転
ctx.setTransform( Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), posX - posX * Math.cos(rad) + posY * Math.sin(rad), posY - posX * Math.sin(rad) - posY * Math.cos(rad) );
// イメージの描画
ctx.drawImage(
img
, imgX // 画像上の描画開始位置X
, imgY // 画像上の描画開始位置Y
, imgW // 描画する画像の幅
, imgH // 描画する画像の高さ
, imgPosX // 描画位置X
, imgPosY // 描画位置Y
, imgDrawW // 描画幅
, imgDrawH // 描画高さ
);
// コンテキスト復元
ctx.restore();
}
/*
ページロード完了
*/
function OnLoad() {
/*
初期化
*/
function OnInit() {
// マウスイベントを受け取る
canvas.addEventListener(
"mousedown",
function (e) {
/*
タップ位置の取得
FireFoxの場合は、offsetXとoffsetYがundefinedになる
*/
var posX = (e.offsetX !== undefined) ? e.offsetX : (e.layerX - e.target.offsetLeft);
var posY = (e.offsetY !== undefined) ? e.offsetY : (e.layerY - e.target.offsetTop);
// 画像の描画
DrawImage();
// 角度の変更
angle += 10;
if (angle > 359) {
angle = 0;
}
}
);
// 画像の描画
DrawImage();
}
// キャンバス取得
canvas = document.getElementById( "canvas" );
// コンテキストの取得
ctx = canvas.getContext('2d');
// キャンバスのクリア
ctx.fillStyle = 'white';
ctx.fillRect( 0, 0, canvas.width, canvas.height );
/*
イメージの読み込み
*/
{
// 1枚目の読み込み
img01 = new Image();
img01.onload = function () {
// 初期化
OnInit();
};
img01.src = "./img/hidekiti.png";
}
}
</script>
</head>
<body bgcolor="#c0c0ff" onload="OnLoad()">
<h1>画像の回転</h1>
<canvas width="300" height="240" id="canvas" style="background-color:black;"></canvas>
<br />
画像を回転させます。クリックすると画像が回転します。
<br />
<a href="../html5_list.html">戻る</a>
</body>
</html>