swfmill: swfファイルとXMLファイルを相互変換するオープンソースツール

swfmillとは、swfファイルを解析してxmlファイルに変換したり、逆にxmlからswfファイルを生成することができるツールである。内部的にMTASC(前回紹介した:MTASC(Motion-Twin ActionScript2 Compiler): フリーのコマンドラインActionScript(Flash)コンパイラを参照してください)を利用し、FlashのSWFファイルを生成とする。

SWF内に画像やフォントが埋め込まれている場合、それらを取り出してdataとしてXML内に出力することができる。なので、そのXMLを再度SWFにすると、画像も再現されるのだ。これができるのは凄い。とは言え、SWFからXMLを生成し、再度SWFを生成し直したときの再現は完璧ではない。アクションの一部はうまく動作しなくなった。だが、画像のスライドショー等、簡単なSWFであれば十分XMLをベースに生成できそうだ。簡単でと言えば、SWFMILLでできること:

・外部画像のシンボル化:このシンボルにリンケージを付けてAS2からアタッチムービーできるようになる。
・外部SWFのシンボル化:このシンボルにリンケージを付けてAS2からアタッチムービーできるだけでなく、外部SWF内の子要素MCまでアクセスできる。
・外部音声データのシンボル化
・MCの生成:AS2を使わなくとも、ライブラリーからシンボルをステージにドロップしてインスタンスを生成するようにステージにMCを生成できる。
・キーフレームの生成:タイムラインを生成できる。
・フォントの埋め込み
・テキストフィールドの生成

swfmillのインストール条件

swfmillはいくつかの依存ライブラリがあるため、必要なライブラリがインストールされていないとインストールできません。
それぞれのライブラリがインストールされているかどうかは環境によって異なりますのでそれぞれ対応して下さい。
たとえば、libxmlが不足していると別途インストールするひつようです。
また、コンパイル及びインストールを行う必要がありますので、root権限とgccコンパイラのあるサーバー環境が必要です。

swfmillのインストール手順

swfmillをダウンロードします。


[root@host src]# wget http://swfmill.org/releases/swfmill-0.2.12.tar.gz

ダウンロードしたファイルを解凍し、解凍したディレクトリに移動します。


[root@host src]# tar xzf swfmill-0.2.12.tar.gz
[root@host src]# cd swfmill-0.2.12

Flash1.1に対応できるようにパッチをダウンロードして適用します。


[root@host swfmill-0.2.12]# wget http://lab.klab.org/files/flash/encoding.patch
[root@host swfmill-0.2.12]# patch -p1 < encoding.patch

ビルドしてみます。


[root@host swfmill-0.2.12]# ./configure

checking for XML… configure: error: Package requirements (libxml-2.0) were not met:
No package ‘libxml-2.0’ found

xmlのライブラリが足りないようでしたので必要なライブラリをインストールします。


[root@host swfmill-0.2.12]# yum install libxslt-devel

再度ビルドします。

[root@host swfmill-0.2.12]# ./configure

ビルドが成功したのでインストールします。


[root@host swfmill-0.2.12]# make
[root@host swfmill-0.2.12]# make install

インストールが成功しました。

使い方:

SWFをXMLに変換する


$ swfmill swf2xml main.swf main.xml

XMLをSWFに変換する


$ swfmill xml2swf main.xml main.swf

画像・音声の入れ替え

元の画像ファイルと変更する画像ファイルを用意する(PHPソースコード)


$search = base64_encode($befor_img);
$replace = base64_encode($after_img);
$xml_str = file_get_contents(‘main.xml’);
$xml_str = str_replace($search, $replace, $xml_str);

画像の抽出が上手く行かない場合

$search = base64_encode(“\xFF\xD9\xFF\xD8”.$befor_img);
$replace = base64_encode(“\xFF\xD9\xFF\xD8”.$after_img);

テキストフィールドの書き換え


tags->DefineEditText @ initialText = テキスト
tags->DefineEditText->color->Color @red @green @blue = 色

を書き換える

アクションスクリプトを書き換える

変数

tags->DoAction->actions->PushData->items->StackString @ value = 変数名
tags->DoAction->actions->PushData->items->StackString @ value = 値
tags->DoAction->actions->SetVariables

パスの色やムービークリップ等をそのままごっそり入れ替える

tags->DefineShape2 -> グラフィックシンボル
tags->DefineSprite -> MovieClip (インスタンス化されている)

リソース:
http://swfmill.org/  ホームページ
http://blogs.yahoo.co.jp/k3_labs/3077231.html  FlashDevelopからSWFMILLを巧く使うチュートリアル
http://packages.ubuntu.com/ja/source/intrepid/swfmill  swfmill 関連パッケージ

1 thought on “swfmill: swfファイルとXMLファイルを相互変換するオープンソースツール”

Leave a Reply

Your email address will not be published. Required fields are marked *