プログラムで幾何学的な図形を描き、画像ファイルを作る(p5.js)

Monaca Educationで新しいプロジェクトを作成する際に、テンプレート「Processing(p5.js)」を選択すると、p5.jsを使って、図形を描くプログラムを作成できます。

この記事では、p5.jsを使って作成した図形を、画像ファイルとしてダウンロードできるようにする方法を紹介します。

なお、p5.jsについては、その公式ページや、本サイト(あんこエデュケーション)内の関連記事について、リンクをまとめて記事の最後に掲載しています。

p5.jsを用いて、幾何学的な図形を描くプログラム

次の例では、300×300の領域に、45度に傾いた正方形を描いています。背景は灰色で、線は黒です。

Monaca Educationで作成したp5.jsプロジェクトの中の、ファイルsketch.jsに書くプログラムは、次の通りです。


let c;

function setup() {
  c = createCanvas(300, 300); // キャンバスの大きさを縦・横300ドットに変更
  background(220); // 背景色を灰色にする

  // 描画の色と太さを設定
  stroke(0); // ペンの色を黒にする
  strokeWeight(2); // 線の太さ

  // 菱形を描く
  translate(150,150); // 描きやすいように、中央を(0,0)にする

  // 左中央から上中央
  line( -150,0, 0,150 );
  // 上中央から右中央
  line( 0,150, 150,0 );
  // 右中央から下中央
  line( 150,0, 0,-150);
  // 下中央から左中央
  line( 0,-150, -150,0 );
}

途中に出てくる関数translate()は、座標の原点(0,0)の位置を変更しています。

もともと、p5.jsでは座標の原点は描画する領域の左上隅にあり、X軸の値もY軸の値も、0以上の値しか取らないように設計されています。

そこへ関数translate(150,150)を実行すると、300×300の正方形の描画領域の、中心(※(x,y)=(150,150)の点)が原点になります。もともと原点(0,0)だった点は、座標(-150, 150)になります(座標の左上)。

関数translate()で座標の原点を移動した後、続いて、左中央から上中央、上中央から右中央、右中央から下中央、下中央から左中央へと、4本の線を引いています。関数line()に4つの引数を指定していますが、前2つが線の開始点のX座標の値、Y座標の値で、後2つが線の開始点のX座標の値、Y座標の値です。

保存して実行すると、次のような図形がプレビューパネルに描画されます。なお、背景が灰色なのは、関数background(220)の効果です。

関数background()に1つ数値を与えています。黒なら0、白なら255で、その間の値を指定して好きな明るさの灰色を指定できます。ペンの色を決めている関数stroke(0)の引数の値も同様です。黒(0)から白(255)の範囲で、好きな灰色を指定できます。

関数background()も関数stroke()も、引数を三つ、RGBの値をそれぞれ指定して、黒・灰・白以外の色を指定することもできます。

いずれの関数も、詳細はリファレンスを参照してください。

以上の手順で、幾何学的な模様を描くことができました。

作成した図を画像ファイルとしてダウンロードする

続いて、作成した図をファイルとしてダウンロード出来るようにしてみましょう。

関数setup()の冒頭に、次の行があります。


c = createCanvas(300, 300); // キャンバスの大きさを縦・横300ドットに変更

この行では、図形を描く「キャンバス」という要素を、サイズを指定して作成しています。作成したキャンパスは、変数cに代入されます。

ここで作成したキャンバス(=変数cに代入されている値)を指定して、画像ファイルを作成する命令は、次のようになります。


  //jpgファイルとして保存する
  saveCanvas(c, 'myCanvas', 'jpg');

この行を、関数setup()の最後に追加します。この関数呼び出しでは、変数cに代入されているキャンバスにつき、JPG形式の画像ファイルを生成し、ファイル名をmyCanvasに指定しています。

ファイルsketch.jsを保存すると、プレビューパネルに図形が描画され、すぐに画像ファイルがmyCanvas.jpgというファイル名で作成されます。ブラウザの機能を使って、画像ファイルのダウンロード・保存を行います。

※このプログラムは、実行するたびに新しいファイルを生成するので、試し終わったら上記の関数saveCanvas()は削除すると良いでしょう。

上の例では、JPEG形式で画像ファイルを作成しましたが、3つ目の引数の値を’png’とすれば、PNG形式で生成することもできます。

完成したプログラムの全体は以下の通りです。


let c;

function setup() {
    c = createCanvas(100, 100); // キャンバスの大きさを縦・横300ドットに変更
    background(220);            // 背景色を灰色にする

    // 描画の色と太さを設定
    stroke(0);              // ペンの色を黒にする
    strokeWeight(2);        // 線の太さ

    // 菱形を描く
    translate(50, 50);     // 描きやすいように、中央を(0,0)にする

    // 左中央から上中央
    line(-50, 0, 0, 50);
    // 上中央から右中央
    line(0, 50, 50, 0);
    // 右中央から下中央
    line(50, 0, 0, -50);
    // 下中央から左中央
    line(0, -50, -50, 0);

    //jpgファイルとして保存する
    saveCanvas(c, 'myCanvas', 'jpg');
}

 

作成した画像ファイルを活用しよう

作成した画像ファイルは、Webページの背景画像などに活用してみましょう。単純な図形でも、繰り返して配置すると、ページの印象を作り出すことができます。

今回は詳細は省略しますが、次のようにすると、画像をWebページの背景に設定できます。

短い説明をすると、次の通りです。

  • プロジェクトのフォルダwwwの下に、画像用のフォルダimagesを作る
  • 画像用のフォルダimagesに、作成した画像ファイルをアップロードする
  • style.cssに、タグbodyのスタイルを書く。CSSで背景画像(backgraound-images)を指定する

 

以上の通り、今回は、p5.jsでプログラミングして図形を作画して、画像ファイルを作成する方法を紹介しました。

p5.jsの公式ページ/ブログ記事

p5.jsの公式ページ https://p5js.org/

p5.jsの日本語ページ https://p5js.jp/

p5.jsを使って、図形を描いたり、ボタンを表示してみよう

p5.jsで図形を描き、色を付ける

アルゴリズムのヒントを生成AIに教えてもらおう〜「うずまき」を描くプログラム〜