Flashを動的生成するサーバー
これまでのサンプルは、ディスク上にSWF形式のファイルを生成するというものでしたが、WebサーバーからFlashムービーを返すことも可能です。クライアントのブラウザに直接SWFデータを返すにはSWFMovie
オブジェクトのoutput()
関数を呼び出します。
int swfmovie->output ( [int compression] )
compression
は、0~9までの範囲でSWFの圧縮レベルを指定する省略可能な引数です。この関数を呼び出すと、PHPはコンテンツを要求しているクライアントに対してSWFデータを返します。ただし、明示的にクライアント側にFlashデータを返すことを伝えなければ、ブラウザがデータ形式を判断できません。そのため、通常はoutput()
関数を実行する前に次の文を実行します。
header('Content-type: application/x-shockwave-flash');
これにより、ブラウザはコンテンツの種類を判断でき、サーバーから受け取ったSWFムービーの表示が可能です。当然、このデータはサーバー上で保存されるものではないので、個々のアクセスごとに生成され、使い捨てられます。
この方法を利用することで、サーバーが保有しているユーザー情報などから、そのユーザーに限定したムービーを動的に生成することができます。
<?php $topMargin = 100; $font = new SWFFont("test.fdb"); $image = new SWFBitmap(fopen("perry.jpg", "rb")); $text = new SWFText(); $text->setFont($font); $text->setColor(0, 0, 0); $text->moveTo(10, 50); $text->setHeight(20); $text->addString($_GET["msg"]); $imageShape = new SWFShape(); $fill = $imageShape->addFill($image); $fill->moveTo(0, $topMargin); $fill->scaleTo(37); $imageShape->setRightFill($fill); $imageShape->movePenTo(0, $topMargin); $imageShape->drawLineTo(30, $topMargin); $imageShape->drawLineTo(50, $topMargin + 40); $imageShape->drawLineTo(50, $topMargin); $imageShape->drawLineTo(400, $topMargin); $imageShape->drawLineTo(400, $topMargin + 400); $imageShape->drawLineTo(0, $topMargin + 400); $imageShape->drawLineTo(0, $topMargin); $swf = new SWFMovie(); $swf->setDimension(400, $topMargin + 400); $swf->setBackground(255, 255, 255); $swf->add($text); $swf->add($imageShape); header('Content-type: application/x-shockwave-flash'); $swf->output(); ?>
コード10は、HTTP のGET
メソッドから取得した 「msg」という名前を持つデータを使ってペルリ提督の吹き出しに表示される文字を生成するWebアプリケーションです。この方法であれば、別の HTMLなどで作られたフォームからこのプログラムを呼び出すことができ、入力された文字列に従って吹き出しに表示するテキストを変更できます。
このプログラムでは、提督の画像ファイルである「perry.jpg」を読み込み、ムービーの下部に表示しています。セリフ用の領域を空けるために、イメージの座標をmoveTo()
関数で移動させ、さらにscaleTo()
関数でイメージを表示する長方形のサイズに伸縮させています。画面の上部には、描画するテキストの文字列を $_GET["msg"]
から取得して設定しています。
コード10を実行するには、URIから起動しなければなりません。例えば、次のようなHTMLファイルを用意し、Sample11と同じWebサーバー上のディレクトリの配置します。
<html> <head> <title>ペルリ提督のひとこと</title> </head> <body> <p>ペルリ提督の台詞を入力してください。</p> <p><img src="perry.jpg" alt="ペルリ提督"></p> <!--action属性は、実行環境によって適切なURIに変換してください--> <form action="sample10.php" method="GET"> <input type="text" name="msg"> <input type="submit" value="送信"> </form> </body> </html>
ブラウザから、このページにアクセスし(ファイルとして開くのではなく、必ずWebサーバーにアクセスしてください)、テキストボックスにペルリ提督のセリフを入力して[送信]ボタンを押せば、Sample11が実行されて入力した文字列を吹き出しに描画するFlashムービーが表示されます。
このように、Webサーバーから生成したFlashを返すことで、ユーザーからの要求やユーザー情報に基づいた独自のムービーを表示させることができます。
最後に
さて、本稿ではMingを使ったSWFファイルの生成を扱ってきましたが、いかがだったでしょうか。これまでFlashと言えば、Flash作成ツールを使ってSWFファイルを生成し、Web上でファイルを公開するという方法が一般的だったと思います。しかし、Web 2.0に代表されるような新しいWebの時代では、こうした静的なコンテンツから、個々のアクセスに最適化された動的なコンテンツにシフトしています。PHPとMingの組み合わせであれば、巨額の投資を必要とせずに、容易にFlashを動的に生成するアプリケーションサーバーを実現できます。
本稿で作成したSWFムービーは動きのあるものではありませんでしたが、Mingで生成するSWFファイルでもアニメーションやActionScriptを使ったインタラクティブなFlashムービーを実現することも可能です。詳細はPHPのドキュメントや、Mingの公式サイトで公開されているドキュメントを参照してください。