SWFEditor って?

  • Flash の実行ファイル SWF を書き換える為の PHP extension です。主に Flash Lite を想定しています。
  • 初め、SWFReader と SWFWriter で分けて作っていたのですが、両方の機能を持つ意味で SWFEditor という名前にしました。

何が出来るのか

  • SWF を解析したい
    • swfInfo をお使い下さい。
    • swfed-*.tar.gz に含まれる www を利用するのもお勧めです。こんなのが作れます。 >

http://awm.jp/~yoya/php/swfed/

  • 画像を入れ替えたい。
    • replaceBitmapData 又は、replace{JPEG|PNG|GIF}Data をお使い下さい
  • 変数を渡したい
    • setActionVariables か replaceActionStrings をお使い下さい。
  • ダイナミックテキストの文字を変えたい
    • replaceEditText をお使い下さい。
  • 音声を入れ替えたい
    • replaceMLDData をお使い下さい。(MLD, SMAF に対応してます。mp3 は今のところ未対応)
  • アニメーションを入れ替えたい
    • replaceMovieClip をお使い下さい。
  • その他の機能や詳細については Wiki のメソッド一覧(SWFEditor)をご覧下さい。

生成された SWF について

何も入れ替えてないのにサイズが変わります

  • Zlib の圧縮レベルによって変わります
  • ツールによっては無駄にサイズを使う事があります
  • 逆にツールによって本来必要なサイズが削られてる事もあって(Player によって表示出来たり出来なかったり)、swfed が補正した結果サイズが増える可能性もあります。

JPEG を埋め込んだ場所が赤く表示される

  • プログレッシブ JPEG は未対応なので、そうでないか確認して下さい。(SWF 自体が対応していないので、埋め込む場合はプログレッシブ外しの変換をする必要がある)
  • 元々表示出来ない JPEG を渡しても赤くなります。

透明度指定が無視される

  • 透明画像は5枚までしか透過しないので、重ねすぎていないかご確認を。(Flash Lite Player の機能制限)

特定の機能が動かない

PNG や GIF に関連する機能が動かない (0.43 まで)

  • php -i で各々の対応状況が出ます。no support と出る場合は configure 実行時に PNG や GIF のライブラリを認識出来ていません。ライブラリが存在する場合はオプションをディレクトリを指定してビルドし直して下さい。

処理が重たい

input メソッドが重たい

  • input メソッドは tag 毎に chunk 分割してるだけなので、ファイルI/Oを疑った方が良いです。例えば同じディレクトリに大量のファイルがあるとか、HDD の寿命が切れそうだとか。

Segmentation fault が起きる

  • swfed 以外の extension や PHP 自体の build に問題がある事もあるので、swfed.so を外しても発生するか確認して下さい。
  • 再現する SWF とプログラムを作者に送れば、なる早で治します。こちらの手元で再現出来ないと時間がかかりますが。。

build 出来ません

checking for the location of libpng... configure: error: swfed support requires (0.44 以降)

  • libpng をインストールして下さい。debian や centos なら libpng-dev のようなパッケージがあります。

他のツールで良くない?

swfmill 使えばよくない?

  • swfmill はコマンドラインツール。swfed は PHP extension
    • 外部コマンドとして exec するとか、daemon 化して通信するとか工夫が必要
    • なので、Web で晒して大量にアクセスされる状況で使うと負荷が厳しそう
  • swfmill は何でも書き換えられそうだけど、swfed は画像とテキストしか処理出来ない
  • SWF と XML との相互変換なので重たそう
  • でも、XML に落とす前の内部データ形式があるはずなので、そことの php binding が出来ると swfed の存在意義はなくなりそうw
  • http://labo.e-2.co.jp/data/php-study33-swfmill-php.pdf ←これ、よさそうですね ^^;

ming 使えばよくない?

  • ming は一から構築するもの。swfed は一部だけ差し替えるもの
  • ming に loadSWFfile のような機能が付いたら swfed の存在意義は殆ど無くなりますw
    • loadSWFfile 機能をつけようとした事はありますが、枝場の修正では無理そうなので諦めました
    • 画像入れ替えしか考えてなかった当時としては over spec でしたし
  • swfed の方が設計上は必要な処理が少ないのでパフォーマンスに有利そうだけど…
    • ming は実装の出来が良いので、実際に測定して比較する必要があります (CPU,memory両方の観点で)