はじめに
本稿では、近年Webアプリケーション開発などで広く実用されているPHP言語を使って、Flashプレイヤーで再生できるSWFフォーマットのデータを動的に生成する方法を解説します。PHP 4.0.5以降には、SWFフォーマットのムービーを作成するMingと呼ばれるオープンソースライブラリ(LGPL)が導入されています。PHP言語からMingの機能を利用することで、SWFフォーマットのファイルを生成したり、Flashムービーを動的に生成するWebアプリケーションを開発できます。
一般的なFlashムービーの生成方法では、Adobe社のFlash Professionalを代表とする作成ツールを使ってSWFファイルを出力します。何らかのコンテンツを事前に作成し、それをWebなどにアップロードするならばこの方法で十分です。しかし、ユーザーの要求に従ってアプリケーションが動的にFlashムービーを生成したい場合は、当然この方法は使えません。プログラムのロジックでアプリケーション実行時にFlashムービーを生成しなければなりません。
PHPとMingを使うことにより、PHPで開発したアプリケーションから動的にSWFフォーマットのFlashムービーを生成できます。Mingライブラリは、SWFフォーマットの内部を隠蔽し、オブジェクトを組み合わせることでFlashムービーを構築できます。Mingライブラリは現在も開発が続けられているオープンソースのプロジェクトなので、最新の情報はMingの公式サイトで確認してください。
また、MingライブラリはPHPからだけではなく、C/C++、Perl、Python、Rubyからも利用できます。Mingのソースコードやライブラリのインストールなどについても、公式サイトを参照してください。最新のPHPのWindows向けマニュアルインストール用パッケージには、既定でMingライブラリを含む拡張モジュールが含まれています。
サーバー構成
本稿のサンプルコードの実行は、以下の構成でテストしています。一部のサンプルは、Apacheで公開するWebアプリケーションとして動作させなければなりません。ただし、Mingを使ってディスク上にSWFファイルを生成するだけのサンプルは、PHPを直接実行する形でも結果を得ることができます。
- Microsoft Windows XP Professional Version 2002 Service Pack 2
- Apache 2.0.59
- PHP Version 4.4.4
- Ming 0.3 beta1
Apache を入手してインストールするには、以下のApache HTTP Server Projectを参照してください。
PHPは、以下の公式サイトからダウンロードすることができます。インストール方法や Apacheの設定方法などもマニュアルに記載されています。
Apache、およびPHPのバージョンは、完全に一致させる必要はないでしょう。PHP4以降のバージョンで、Mingが正しくインストールされていれば、おそらく上記のバージョン以外でも動作するはずです。また、Web サーバーに関しては、PHPを実行できる環境であれば Apacheである必要もありません。しかし、本稿での動作確認は上記の構成で行っているため、他のバージョンでの動作は保証できません。
また、生成したSWFファイルの再生にはFlash Playerが必要です。最新のFlash Playerは、以下のAdobe社のページからインストールできます。本稿で生成したSWFファイルはFlash Player 6で再生できることを確認しているので、Flash Player 6以降のバージョンがインストールされているブラウザなどで再生できます。
SWFファイルの生成
Mingには、いくつかの定義済みクラスが提供されています。私たち開発者は、Mingが提供するいくつかのクラスのオブジェクトを生成し、SWFムービーを表すオブジェクトを正しく構築することで、SWFファイルを作成できます。
SWFファイルは、ディスクに保存することも、Webサーバーからブラウザに返すことも可能です。どちらにしても、最初にやるべきことはSWFムービーそのものを表すSWFMovie
クラスのオブジェクトを作成することです。SWFMovie
オブジェクトは、SWFフォーマットのデータそのものを表します。すなわち、1つのSWFMovieインスタンスが、1つのSWFフォーマットのファイルに対応しています。
SWFMovie
オブジェクトを生成するにはswfMovie()
コンストラクタを呼び出します(注1)。
SWFMovie swfmovie ( void )
このコンストラクタの結果は、生成されたSWFMovie
オブジェクトです。SWFMovie
オブジェクトは、SWFバージョン4ムービー形式で、新しいSWFムービーを作成します。当然、生成されたばかりのSWFMovie
オブジェクトには、何もデータが設定されていません。この状態でデータを保存しても、映像が表示されることはありません。
それでも、初期状態のSWFMovie
オブジェクトを出力することは可能です。SWFMovie
オブジェクトをディスクに保存するにはsave()
関数を使います。
int swfmovie->save ( string filename [, int compression] )
filename
パラメータには出力するファイル名を、compression
には0~9の範囲で圧縮レベルを設定できます。compression
は省略可能です。
<?php $swf = new SWFMovie(); $swf->save("test.swf"); print "SWF file has been saved."; ?>
コード00は、SWFMovie
オブジェクトを生成し、初期状態のままsave()
関数を使ってディスクに保存しています。プログラムが正しく実行されれば、カレントディレクトリに「test.swf」という名前のファイルが生成されているはずです。このSWFフォーマットのファイルは、Flashプレイヤーで正しく再生できます。
既定では、白い背景、幅320ピクセル、高さ240ピクセルの映像になっています。例えば、Internet Explorerなどでファイルを開き、ドキュメント上で右クリックをすれば、Flash ムービーであることが確認できます。
ムービーのサイズや背景色の設定
SWFMovie
オブジェクトは、ムービーのサイズや背景色を設定できます。ムービーのサイズを設定するにはsetDimension()
関数を使います。
void swfmovie->setdimension ( int width, int height )
width
には幅を、height
には高さを、それぞれピクセル単位で指定します。
ムービーの背景色はsetBackground()
関数で変更できます。
void swfmovie->setbackground ( int red, int green, int blue )
red
には赤要素、green
には緑要素、blue
には青要素を表す0~255までの値を指定します。
<?php $swf = new SWFMovie(); $swf->setDimension(400, 300); $swf->setBackground(0, 0, 0); $swf->save("test.swf"); print "SWF file has been saved."; ?>
コード01は、幅400ピクセル、高さ300ピクセルで、背景が黒のSWF ムービーを生成します。単純にSWFフォーマットのファイルをInternet Explorerで表示しようとすると、自動的に伸縮されてしまいますが、このムービーのオリジナルのサイズは400×300ピクセルになります。