プロフィール

開発用語Wiki

← 用語一覧に戻る

HTML Canvas API

ブラウザの画面に絵を描いたり、画像を加工したりするとき、裏側でよく使われているのが HTML Canvas API です。HTMLに <canvas> タグを置くと、JavaScriptでそこに図形・文字・画像を自由に描けます。

AIツールの「Canvas」とは全くの別物です。AIツールとしてのCanvasは Canvas(AIツール) を参照してください。


仕組み

<canvas> タグは「何も書かれていない白紙のキャンバス」のようなものです。JavaScriptから getContext('2d') という命令でペンを受け取り、そこに描き込んでいきます。

<!-- HTMLにキャンバスを置く -->
<canvas id="myCanvas" width="400" height="300"></canvas>
// JavaScriptでペンを受け取り、四角を描く
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

ctx.fillStyle = 'royalblue'; // 色を指定
ctx.fillRect(50, 50, 200, 100); // 四角を描く(x, y, 幅, 高さ)

画像圧縮への応用

「Canvasを使って画像を圧縮する」という話をよく耳にするのは、この仕組みのためです。

手順

  1. <img> タグや File オブジェクトから画像を読み込む
  2. Canvas に drawImage() で画像を描き込む(このとき幅・高さを縮小できる)
  3. canvas.toBlob('image/jpeg', 0.8) で「JPEG品質80%」のデータに変換する
function compressImage(file, quality = 0.8) {
  return new Promise((resolve) => {
    const img = new Image();
    img.onload = () => {
      const canvas = document.createElement('canvas');
      canvas.width = img.width;
      canvas.height = img.height;

      // Canvasに画像を描き込む
      const ctx = canvas.getContext('2d');
      ctx.drawImage(img, 0, 0);

      // JPEG形式・品質80%で書き出す
      canvas.toBlob(resolve, 'image/jpeg', quality);
    };
    img.src = URL.createObjectURL(file);
  });
}

quality0.0(最低画質)〜 1.0(最高画質)で指定でき、ファイルサイズを大幅に削減できます。


主な用途

用途 具体例
画像圧縮・変換 アップロード前にファイルサイズを削減、PNGをJPEGに変換
グラフ・チャート描画 データを棒グラフや円グラフで可視化
ゲーム開発 ブラウザゲームの描画エンジン
動画フレーム処理 動画の特定フレームを画像として取り出す
QRコード・バーコード生成 動的にコードを描画する

WebGL(3D描画)との違い

getContext('2d') は平面(2D)の描画向けですが、getContext('webgl') を使うと 3D グラフィックも描けます。これは WebGL と呼ばれ、ブラウザ上で動く 3D ゲームや地図アプリ(Google Maps の 3D ビューなど)に使われています。


公式ドキュメント


このサイトでの使われ方

このサイト(arismmn)では、Cloudinary に画像をアップロードする際のクライアントサイド前処理としてHTML Canvas APIを利用することがあります。大きな画像をそのまま送信するとアップロードに時間がかかるため、Canvas で縮小・圧縮してからアップロードすることでユーザーの待ち時間を短縮します。

Claude Code
Powered by
Claude Code
(使用モデル claude-sonnet-4-6)
← 用語一覧に戻る