JavaScript: canvas の画像や図形を拡大・縮小する

HTML5 Canvas API を使って、画像や図形を拡大・縮小させることができます。

拡大・縮小させるには scale() メソッドを使用します。

scale() メソッドの構文


scale(水平倍率, 垂直倍率)

// 例: 水平方向に1.5倍、垂直方向に0.8倍
scale(1.5, 0.8)

サンプルコード: 画像を拡大

HTML・CSS


<canvas id="canvas"></canvas>

<style>
    canvas {
        border: 1px solid silver;
    }
</style>

JavaScript


var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');

// Image オブジェクトを生成
var img = new Image();
img.src = '../sample/img/bg_nangoku2.jpg';

img.onload = function(){
    // 通常
    c.drawImage(img, 0, 0);

    // 拡大
    c.scale(1.5, 1.5);
    c.drawImage(img, 50, 50);

}

2つの画像を描画しています。上は通常表示で、下が scale(1.5, 1.5) を実行させたものです。

拡大・縮小させる場合は、描画する前に scale() メソッドを実行します。 今回は2つめの画像だけを回転するので、2つめの drawImage() メソッドの前に scale() メソッドを実行しています。

注意点としては画像の左上や中央から拡大しているのではなく、 canvas の左上から拡大している所です。

ですから drawImage(img, 50, 50)としていますが、実際は(50, 50) ではなく、 (75, 75) から描画されています。

次は図形を拡大・縮小させてみます。

サンプルコード: 図形を拡大・縮小

HTML・CSS は省略します。

JavaScript


var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');

// 通常
c.fillRect(0, 0, 20, 20);

// 拡大・縮小
c.scale(1.2, 0.8);
c.fillRect(20, 20, 20, 20);

今回は fillRect() メソッドで矩形を描画しています。

指定しているサイズはどちらも幅 20、高さ 20 と同じです。

2番目の図形は、幅を 1.2倍、高さを 0.8倍に指定しています。 描画を開始する点(x, y)は(20, 20)を指定しているのですが、 canvas の左上から拡大・縮小されますので、 実際は(24, 16)から描画が開始されていることに注意してください。