大したことはやっていない。Cairoで描画する前にサーフェイス(面)とコンテキストが必要。絵画で例えるとサーフェイスがキャンバスでコンテキストが筆だ。基本的にコンテキストを通して描画を行う。行7でサーフェイスを作る。その際、ピクセルのフォーマットと画像の幅と高さを指定する。ここで使うピクセルフォーマットは32ビットのRGBA(各チャンネルは8ビット)。Contextのset_source_rgbメソッドで色を指定する。アルファチャンネルを使用するならset_source_rgbaを使う。ここは奇麗なブルーにする。次の行は長方形を描くように見える。長方形が描かれるのは次の行のcontext.fill()だ。Illustratorを使っている人なら基礎中の基礎だが、ベクトル絵には「塗り」と「線」がある。英語では塗りのことを「fill」といい、線は「stroke」だ。ここで長方形を塗るという指示を出している。最後にサーフェイスのwrite_to_pngメソッドでPNGファイルを出力する。File.exists?("cache")surface.write_to_png("cache/img#{frame_no}.png")endちょっと長くなったが、最初のプログラムと大して変わったことはやっていない。大きな違いは1枚ではなく15枚もの画像を出力していることだ。下記のコードで白い正円を描いている。Math::PI)context.fill()context.arcで正円を描く場合、x座標、y座標、半径を渡してからさらに弧の開始角度と終了角度が必要。円なら、0から2πにする。y座標はサイン派に乗って上下する。15.0)「cache」フォルダーがなければ作ってから15枚の画像をそこに保存する。File.exists?("cache")surface.write_to_png("cache/img#{frame_no}.png")後一歩。FFmpegを使えば、その画像から動画が簡単に作れる。Rubyをやめてターミナルに戻る。ball.mp4「cache」フォルダーにあるimg.pngという形式のファイル名を持つ画像を入力にする。29.97」でフレームレートを指定する。Mbpsにして「ball.mp4」に動画を保存する。こんな感じになる(ブラウザーによって再生できない場合がある):https://jmpelletier.com/wp-content/uploads/2014/02/ball.mp4いいじゃないか。ターミナルに戻るのはやはり面倒だ。運良く、Rubyで上記のコマンドが簡単に実行できる。おまけに、途中に生成したファイルを削除することもできる。冒頭に書いた通り、残すとターミナルで圧縮設定を変えて動画を書き直すことができる。cache`究極につまらない動画だが、同じ方法で究極に格好いいジェネレーティブ・アートも造れるので、一度試してみてください。コメントデータの処理方法の詳細はこちらをご覧ください。