■目的
swf内の画像書き換え
■流れ
swf0 -> xml0 -> (xml書き換え) -> xml1 -> swf1
■ツール
こちらから良さげに書き換えられたswfmillをDL.
http://d.hatena.ne.jp/haru-komugi/20090213/1234541317
■元となるswf作成
Flash Lite 1.1で original.swf を作成。
(card00.jpg, card01.jpgが回転するもの。
これをcard02.jpg, card03.jpgに書き換えることが目的)
■補足知識
フィーチャーフォン向けFlashは以下の設定で作ります
Flash Lite 1.1,
Action Script 1.0,
Swf file size 100KB,
Memory 1MB
■基本動作確認
コマンドプロンプトから
swfmill swf2xml original.swf > original.xml
swfmill xml2swf original.xml > temp.swf
で相互変換ができることを確認。
■テンプレート作成
original.xmlでは、画像は文字列(Base64)で書かれています。
original.xmlの画像文字列部分をタグに書き換える。
今回は${IMG0000}, ${IMG0001}として
template.xmlとして保存。
■タグ部分を新しい画像に置き換える
今回はruby。↓
実行後、画像が書き換えられたswfができました。
def substitute(text, tag, imgPath)
filename = imgPath
fd = open(filename, 'rb')
fd.binmode
ba = fd.read
fd.close
ba = "\xFF\xD9\xFF\xD8" + ba
b64 = [ba].pack("m").gsub("\n","")
result = text.gsub(tag, b64)
return result
end
xml_template = './template.xml'
f = open(xml_template)
xml = f.read
f.close()
temp = substitute(xml , "${IMG0000}", "./card02.jpg")
temp = substitute(temp, "${IMG0001}", "./card03.jpg")
xml_swf = './substituted_template.xml'
f = open(xml_swf, 'w')
f.write(temp)
f.close
system("./swfmill.exe xml2swf " + xml_swf + " > out.swf")
■おまけ JavaScript変換
Swiffy Extension for Flash Professional
http://www.google.com/doubleclick/studio/swiffy/extension.html
を使ってFlash Lite 1.1プロジェクトから
JavaScriptを含んだHTMLを生成。
swfと同様に動きました。
こちらも画像はBase64だったので
同様に置換すればスマートフォン対応ができます。