SWF Editor for PHP
(c) 2008/03/09- yoya@awm.jp

目的

  • テキストツールで貼り付けた文字列の入れ替え
  • JPEG画像の入れ替え
    • PNGのような未圧縮画像も希望があれば対応するかも

設計

  • PHP extension (php 5.1.6, 5.2.5 で動作確認)
  • bit stream 処理は自作 (もしイイのがあったら誰か教えて…)
  • tag ブロック分割と tag の詳細parse を分けて、余分な処理をなるべく省く。
  • CWF (zlib 圧縮) 対応は後回し (でも、後で対応できるように) ← 対応しました

仕様

  • php.ini の ext 設定に swfed.so を追加
  • PHP extension API
    class SWFEditor {
         function input(string swddata) return true/false;
         function output()              return string swfdata;
         function swfInfo()             return ; // print swfInfo
         function getTagList();
                                        return array(array('tag'=>long,
                                                           'length'=>long,
                                                           'detail'=>bool),
                                                      ...)
         function getTagDetail(integer seqno);
                                        return array(...); image_id とかそれ系
          function getJpegData(integer image_id)
                                        return string jpegdata;
         function getJpegAlpha(integer image_id)
                                        return string alphadata;
         function replaceJpegData(integer image_id, string jpegdata
                                               [,string alphadata])
                                        return true/false;
         function getEditTextString(string variable_name); return text;
         function replaceEditTextString(string variable_name, string text)
                                        return true/false;
         ---- ここから下は未実装
          function getHeaderInfo()       return array('compress'=>...);
         function setHeaderInfo(array('compress'=>...))
                                        return true/false;
         (BMP を読み込むライブラリを知らないので、とりあえず PNG だけ)
         function getPNGData(integer image_id)
                                        return string pngdata;
         function replacePNGData(integer image_id, string pngdata)
                                        return true/false;
         function convertGIFtoAlphaData(string gifdata)
                                        return alphadata;
         function getTagData(integer seqno);
                                        return string tagdata;
    }

使用例

実装

  • なるべく swf_{object|header|tag|...}.c 側に処理を作って、swfed.c はそこへの橋渡しに徹する。
  • swf_tag_<タグ名の省略形>.[hc]
    swf_tag_info_table に swf_tag_detail_handler_t の形式で関数ポインタ群を設定
    -> {create, identity, output, print, destroy}

成果物

プログラム

実験ページ

インストール方法

モジュールのビルド

  • swfed をディレクトリ毎もってくる
  • php ソースツリーの ext 以下に swfed を配置 任意のディレクトリで大丈夫です
  • swfed で phpize & configure & make
cd swfed
phpize
./configure
make

モジュール(新規)設置

  • extension ディレクトリに so を copy
  • php.ini に extension 設定追加
  • apachectl graceful
su
cp modules/swfed.so <php_ext_dir>/.
vi <php_ini_dir>/php.ini
apache graceful

モジュール更新

  • apachectl stop
  • extension ディレクトリに so を copy
  • apachectl start
su
apache stop
cp modules/swfed.so <php_ext_dir>/.
apache start

※無停止で行なう方法があれば誰かご教授頂けるとありがたく。○rz

日記

課題

近日中に対応

  • メモリ管理のブラッシュアップ
    • エージングに耐えられるように
    • おかしな SWF を食わせてもリークしないように
  • swfed.c の new_buff の処理を何とかする。

未定

  • DefineBitsLossless(未圧縮画像, BMP とか PNG 等)も要望があれば対応する。
  • swf_tag.c の処理が冗長なので何とかする

資料

調査

参考

未参考

関連ページ


Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes