IO_SWF 2.0.2 - replaceBitmapData

  • 画像を入れ替えるメソッドを追加しました
    • Bitmap ID(Characterer ID とか Image ID とも呼ばれるモノ)と JPEG, PNG, GIF の画像データを渡すと、SWF 内の ID に対応する画像をそれと差し替えます。
  • replaceActionString の修正
    • replaceActionStrings に名前を変更しました。(前の名前のも残してますが、後で消します)
    • シンボル(MC) 内の ActionScript も処理するようにしました。

導入方法

  • IO_Bit,IO_SWF が入ってない環境
pear install openpear/IO_SWF openpear/IO_Bit
  • 既に入っている場合 (install を実行しても古いままなので)
pear upgrade openpear/IO_Bit
pear upgrade openpear/IO_SWF

実験

$ php /usr/share/php/sample/swfdump.php -f saitama.swf | grep Bits
Code: 6(DefineBitsJPEG)  Length: 2133
$ php /usr/share/php/sample/swfreplacebitmap.php saitama.swf 1 foo.png > tmp.swf
$ php /usr/share/php/sample/swfdump.php -f tmp.swf  | grep Bits
Code: 20(DefineBitsLossless)  Length: 1789343

JPEGPNG に入れ替わりました。

実装


使い方は、swfreplacebitmap.php を見て下さい。

注意点 (2011/6/14 追記)

replaceBitmapData に JPEG 画像を渡すと一瞬で入れ替わりますが、PNG や GIF は結構重たいのでお気を付け下さい。Lossless 画像の格納は SWF の独自形式なので画像の全pixelを見て変換しなきゃダメなんです。
で、PHP GD の画像は red, gree, blue の連想配列で格納されていて for ループ & 配列参照が必要なので、どうしても重たくなります。(PHP の配列は便利なので、その分処理のコストが重た目)

という訳で

2.0.2 から画像も入れ替えられます。 > http://d.hatena.ne.jp/puchiban/20110602/1306989687