今回は、テキストの描画から画像の挿入、その他様々な描画方法、変換方法について見ていきましょう。
テキストの描画
テキストを描画するには、以下の方法があります。
fillText()
strokeText()
それぞれ引数には、「(text, x, y, [maxWidth])」を指定します。
「maxWidth」は省略可能です。
描画するには、以下の設定を使用します。
- font:太さ、大きさ、ファミリーを指定します。
- textAlign:テキストの配置位置を指定します。left, right, center, start, end を指定できます。
- textBaseline:テキストのベースラインを指定します。
- direction:テキストの方向を指定します。左書き、右書きなど。
fillText
const canvas23 = document.getElementById('sample23'); const cont23 = canvas23.getContext('2d'); cont23.font = 'bold 50px Align '; cont23.fillText('Hello World !!', 10, 50);
strokeText()
const canvas24 = document.getElementById('sample24'); const cont24 = canvas24.getContext('2d'); cont24.font = 'bold 50px Align '; cont24.strokeText('Hello World !!', 10, 50);
画像
最初から画像を作成するには、HTMLImageElementのオブジェクトを作成します。
その際は、Image()コンストラクタを使用します。
let img = New Image();
img.src =’ソースのパス’;
const canvas25 = document.getElementById('sample25'); const cont25 = canvas25.getContext('2d'); let img = new Image(); img.src = 'https://hitoridemanabou.net/wp-content/uploads/2022/06/clickicon-1.png'; img.onload = () => { cont25.drawImage(img, 10, 10); };
画像を描画するには、「drawImage()」メソッドを使用します。
drawImage(image, x, y, width, height)
widthとheightを使用することにより、画像を拡大縮小することが出来ます。
また、「drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)」と記述することにより、画像を切り抜くことも出来ます。
詳しくはMDNのサイトをご参照ください。
保存と復元
save():キャンパス全体の状態を保存
restore():直前に保存したキャンパスの状態を復元
const canvas26 = document.getElementById('sample26').getContext('2d'); canvas26.save(); canvas26.fillStyle = 'green'; canvas26.fillRect(10, 10, 110, 110); canvas26.restore(); canvas26.fillRect(120, 120, 120, 120);
save()とrestoreを使用しない場合は、以下になります。
const canvas27 = document.getElementById('sample27').getContext('2d'); canvas27.fillStyle = 'green'; canvas27.fillRect(10, 10, 110, 110); canvas27.fillRect(120, 120, 120, 120);
移動
translate(x, y);
並行方向に移動します。
const canvas28 = document.getElementById('sample28').getContext('2d'); for (let i = 0; i < 5; i++) { for (let r = 0; r < 5; r++) { canvas28.save(); canvas28.fillStyle = 'rgb(' + (200 - 40 * i) + ',' + (255 - 50 * i) + ',255'; //色の変化 canvas28.translate(10 + r * 40, 10 + i * 40); //移動距離 canvas28.fillRect(0, 0, 30, 30); // 矩形のサイズ canvas28.restore(); } }
回転
rotate(angle);
回転させるには、「rotate()」メソッドを使用します。
const canvas29 = document.getElementById('sample29').getContext('2d'); canvas29.fillStyle = 'green'; canvas29.fillRect(50, 50, 150, 30); canvas29.translate(125, 65); canvas29.rotate(Math.PI / 2); canvas29.translate(-125, -65); canvas29.fillStyle = 'red'; canvas29.fillRect(50, 50, 150, 30);
const canvas30 = document.getElementById('sample30').getContext('2d'); canvas30.save(); canvas30.fillStyle = 'green'; canvas30.fillRect(30, 30, 100, 100); canvas30.rotate((Math.PI / 180) * 25); canvas30.fillStyle = 'red'; canvas30.fillRect(30, 30, 100, 100);
拡大縮小
scale(x,y)
const canvas31 = document.getElementById('sample31').getContext('2d'); canvas31.scale(10, 3); canvas31.fillStyle = 'red'; canvas31.fillRect(10, 10, 8, 20); canvas31.scale(-1, 1); canvas31.font = '5px serif'; canvas31.fillText('Hello World', -35, 50);
座標変換
transform(a,b,c,d,e,f)
座標を変換することで、拡大縮小、回転、移動などさせることが出来ます。
- a:水平スケーリング
- b:垂直
- c:水平
- d:垂直スケーリング
- e:水平移動
- f:垂直移動
const canvas32 = document.getElementById('sample32').getContext('2d'); canvas32.transform(1, 0.3, 0.8, 1, 0, 0); canvas32.fillStyle = 'green'; canvas32.fillRect(10, 10, 100, 100);
あとがき
沢山のパターンを見てきましたが、一度で覚えるのは難しいので、まずは基本的な操作方法のみ確認しておきましょう。