flashlite1.1+PHP 動的コンテンツの作成まとめ

最終更新日

php_flash.jpg

flashlite1.1+PHP 動的コンテンツの作成まとめ


今回はflash lite 1.1PHPを使った動的flash作成のまとめをしたいと思います。

今、携帯で使われているFlashのほとんどがflash lite1.1で作成されています。
なぜかといったらどの携帯でも表示させるにはflash lite1.1が適しているからです。

flash lite2以降からはSharedObjectXMLなどが使用可能になり、とても優れたものになるのですが
現状ではまだ推奨されていない状態です。

ということで、とても使いづらいflash lite1.1を使用してコンテンツを作成しなければいけないのですが、
あらゆる場面で思うようにいかないことが多々ある。

・ボタンアクションしてからでないとサーバーから値を取得できない。(loadVariables)
・flash読み込みと同時に受け渡したい値を取得できない。
・外部画像はswfしか読み込めない。(loadMovie

ということで、上記点を回避するために勉強したのが
1.php上でswfを分解し受け渡したい値を配列に入れてswf上で表示させる。
2.swfmillをサーバにインストールし、swfを一度XMLに変換しXMLを操作して、またXMLからSWFに変換する。
3.jpgファイルをswf変換し、外部画像呼び出し(loadMovie)で表示させる。

というのを最近勉強したのでメモする。

■php上でswfを分解して受け渡したい値をswfに入れる
携帯Flash (FLASH Lite 1.1) へ普通にパラメータを渡す
というサンプルをバスキュールさんが提供してくださっていましたのでここを参考にするといいと思います。
下記の方法を使うことで、phpなどでユーザーが入力した文字をflashに受け渡し
flash上でテキストを表示させたり、もしくは、php上でランキングデータをDBから取得し、
それをflashに表示させたりとあらゆる場面で使用可能です。

header(“Content-Type: application/x-shockwave-flash”);

echo swf_wrapper(‘test.swf’,$_GET); //$_GETでなくても配列になっていれば何でも良い

function swf_wrapper($file,$item){
$tags = build_tags($item);
$src = file_get_contents($file);
$i = (ord($src[8])>>1)+5;
$length = ceil((((8-($i&7))&7)+$i)/8)+17;
$head = substr($src,0,$length);
return(
substr($head,0,4).
pack(“V”,strlen($src)+strlen($tags)).
substr($head,8).
$tags.
substr($src,$length)
);
}

function build_tags($item){
$tags = array();
foreach($item as $k => $v){
//$v = mb_convert_encoding($v,’SJIS’,’UTF-8′);
array_push( $tags, sprintf(
“\x96%s\x00%s\x00\x96%s\x00%s\x00\x1d”,
pack(“v”,strlen($k)+2),$k,
pack(“v”,strlen($v)+2), $v
));
}
$s = implode(”,$tags);
return(sprintf(
“\x3f\x03%s%s\x00”,
pack(“V”,strlen($s)+1),
$s
));
}

?>

■関連サイト
flash lite1.1やdocomo端末でswfにGETパラメータを保持させることが、こんなにも難しいと知ってたらFlasherにはなりませんでした。あっ、すこし言い過ぎました

携帯Flash (FLASH Lite 1.1) へ普通にパラメータを渡す

■swfmillで動的flashを作成する。
この手法には難点がひとつあります。
一般的なレンタルサーバーだとインストールできません。
こちらはサーバーにインストールする形のもので、
専用サーバーなどを借りるか、自宅サーバーでないとインストールできない可能性があります。
私は、さくらインターネットの専用サーバーにてテストしました。
このswfmillを使用することで、外部に置いてある画像ファイルなどを動的にflash上で表示させることが可能です。
モーションアバターなどに最適なものだと個人的には思っています。
(静的アバターでよいのでしたらPHPのGD関数を使えばできます。)
swfmillではswfからXMLに変換し、そのXMLの一部のコードをphpで変更し、
php上でそのXMLをSWFに書き出すことで、オリジナルのswfを作り出すことが可能です。

■参考にしましたブログはこちらがわかりやすかったです。
swfmillでケータイFlashを動的生成してみよう(インストール編)
swfmillでケータイFlashを動的生成してみよう(文字列置換編)
swfmillでケータイFlashを動的生成してみよう(画像置換編)
ケータイFlashのレイアウトを文章量に同期させよう
swfmillで出力されるXMLを解析してみよう
swfmillでFlash Lite 1のswfを扱えるようにしてみた
swfmill: swfファイルとXMLファイルを相互変換するオープンソースツール
swfmillを使って動的にFlashLite1.1を作成する方法(画像置換)

■jpgファイルをswf変換する
ユーザーが写メをサーバーにアップし、その写真に対してflashで何かしたいというときに
jpgの写真データをswfに変換し、その変換したものをflashで動的に表示させるというときに必要な技術です。
flash lite2以降からはjpgなどの画像ファイルを直接呼び出せるようになっているので問題ないのですが、
flash lite 1.1ではできません。

変換するには
swftools
Perl で SWF::Builder
バイナリ操作

などがあるそうです。
私はちなみにバイナリ操作し、jpgファイルをswfに変換し、サーバに保存という形をとっています。

■参考サイト
FlashLite1.x の為に画像を swf へ変換する

と3つ紹介しましたが他にもmingなど他の手法も多くあるそうです。
どの手法がベストなのか私にはわかりません。
わかる方がいらっしゃいましたら是非ともお話させていただきたいなと思っています。
1の方法ではauの機種にてうまくflashが表示されないなどの不具合報告もたまにいただいていたりします。
携帯の場合ですと、あらゆる携帯端末に対応しなければいけない点でデバッグも大変だと思います。
早くflash lite1.1がなくなればいいのにと思う限りです。

今後はアンドロイドとiPhoneなどがどのように増えていくのかも気になります
flash CS5からはアンドロイド対応,iPhone対応もしてきますので、
今後開発者側がどのくらい積極的にアプリ開発してくるのか楽しみです。
モバイルFLASHもよりPCよりに。
お問い合わせ気軽にお受けいたします。

今年ももう暮れですね。
今年一年まことにありがとうございました。
良いお年を!

■関連サイト
モバイルサイトの開発「Flash Lite」制作メモ
Flash Lite 1.1 (loadVariables) + MySQL + PHP メモ
Flash Lite 1.1 マリオ待ち受け画像
PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。