IO_SWF 2.0.2 - replaceBitmapData
- 画像を入れ替えるメソッドを追加しました
- 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
実装
- 画像フォーマットに応じて SWF Tag を生成する
- http://openpear.org/package/IO_SWF/src/trunk/IO/SWF/Editor.php (function replaceBitmapData)
- PNG/GIF => Lossless フォーマット変換
- SpriteTag(シンボル, MC) の parse/build
使い方は、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