2011/12/05(月) [n年前の日記]
#1 [flash] FLASH CS5にswfを読み込ませる実験をしてみたり
FLASH CS5のライブラリにベクター画像を放り込みたいわけですよ。なので、svg を swf に変換して読み込ませられないものかと。
◎ swfmillでsvgをswfに変換。 :
_swfmill swf2xml and xml2swf
以下の内容を svg.xml として保存。
libiconv-2.dll が無いと文句を言われた。 _MinGW - Minimalist GNU for Windows - Browse /MinGW/Base at SourceForge.net を辿って、libiconv-1.14-2-mingw32-dll-2.tar.lzma を入手。解凍したら libiconv-2.dll が入っていたので、swfmill.exe と同じフォルダに入れたところ、動いてくれた。
しかし、出力した swf を、FLASH CS5 に読み込ませてみると、Suzuka で出力した swf を読み込ませた時と同じような崩れた表示になった。
根拠のない勝手な想像だけど、swfmill が出力する swf はあくまでAS2.0用で、AS3.0対応の FLASH CS5 では正常に読み込めない・利用できないのではあるまいか。
以下の内容を svg.xml として保存。
<?xml version="1.0" encoding="iso-8859-1" ?> <movie width="640" height="640" framerate="24"> <background color="#ffffff"/> <library> <clip id="mySVG" import="start.svg"/> </library> <frame name="myFrame"> <place id="mySVG" name="myFirstsvg" x="0" y="0" depth="1"/> </frame> </movie>
swfmill.exe -v simple svg.xml svg.swfこれで、svg をインポートした swf が出力されるはず。
libiconv-2.dll が無いと文句を言われた。 _MinGW - Minimalist GNU for Windows - Browse /MinGW/Base at SourceForge.net を辿って、libiconv-1.14-2-mingw32-dll-2.tar.lzma を入手。解凍したら libiconv-2.dll が入っていたので、swfmill.exe と同じフォルダに入れたところ、動いてくれた。
しかし、出力した swf を、FLASH CS5 に読み込ませてみると、Suzuka で出力した swf を読み込ませた時と同じような崩れた表示になった。
根拠のない勝手な想像だけど、swfmill が出力する swf はあくまでAS2.0用で、AS3.0対応の FLASH CS5 では正常に読み込めない・利用できないのではあるまいか。
◎ inkscape2swfc_demo070.pyでscファイルを作成してswfcで変換。 :
_SWFTOOLS
というツール群の中に、swfc.exe というツールがある。テキストファイルを読み込んで swf を出力するツールらしいが、AS2.0もAS3.0も対応してるよ、と読めなくもないので試してみる。
Inkscape で出力したsvgを読んで、swfcに渡すためのファイルに変換出力する、 _Inkscape2swfc(web.archive.org) (inkscape2swfc_demo070.py) というPythonスクリプトが以前は公開されていたらしい。試しに使ってみたり。
それらしいテキストが出力されたので、
どうやら、swfc は相対座標の記述は受け付けないらしい。Inkscape のデフォルト設定はsvgを相対座標で出力する設定になっているため、出力された svg の中には相対座標で記述されていることを示す、小文字の「m」「c」が大量に入っている。それら小文字の「m」「c」をswfcが認識できていないように思える。
仕方ないので Inkscape の設定を変更。ファイル → Inkscape の設定 → SVG出力 → 相対座標を許可、のチェックを外してsvgを保存し直し。svgの中には絶対座標を示す大文字の「M」「C」が並んでいることを確認。
しかしそれでも、swfcの警告が大量に出る。どうも、svg 内の path データが、M x,y x,y C x,y と並んでいるあたりが怪しい。本来そこは、M x,y C x,y という形になるはずではあるまいか。余計に入ってる x,y 値は何を示しているのだろう。
M の後にひたすら x,y x,y x,y が並ぶ時は、単に直線が描かれることを示している模様。「C x,y」はベジェ曲線のコントロールポイント座標を示している。であれば、M x,y x,y C x,y という記述は正しい。最初に直線が描かれ、その次からベジェ曲線になっているというデータに過ぎないはず。
_SWFC Manual を眺めていると、どうも直線を示す場合には L x,y という記述が必要なように思えた。Inkscape は「L」を省略しても問題ないように作られているのだろう…。SVGの仕様書も眺めると、「L」を記述するほうが正しいように思えるが。最近の仕様では省略できるように変更されたのだろうか?
Inkscape の設定を眺めていたら、「強制的にコマンドを繰り返す」という項目が、逐一「L」をつけて出力する設定だと分かった。つまり。
再度 sc に変換して、swfc で swf を出力。それらしい swf が出力された。Flash Player 上では正常表示されている。だが、FLASH CS5 に読み込ませると、正常表示されない…。
SWFC Manual に記載されているサンプル2つを swf に変換して FLASH CS5 に読み込ませてみたが、簡単な図形(house.swf)は表示できたものの、グラデーション図形(gradients.swf)は表示されなかった。つまり、swfc で出力した swf も、複雑な図形は FLASH CS5 側で正常に表示できない模様。
Flash Player では正しく表示される swf が FLASH CS5 では変な表示になるなんて、わけがわからないよ。何にせよ、これ以上 swfc に関して実験しても無駄なようだ。
Inkscape で出力したsvgを読んで、swfcに渡すためのファイルに変換出力する、 _Inkscape2swfc(web.archive.org) (inkscape2swfc_demo070.py) というPythonスクリプトが以前は公開されていたらしい。試しに使ってみたり。
python inkscape2swfc_demo070.py start.svgと打ってみたら、エラーが出た。どうやら Inkscape 上で、
- オブジェクトをパスに変換
- ストロークをパスに変換
- グループ解除(たまに、全てがグループ解除できてない時もあるので注意)
- プレーンsvgとして保存
それらしいテキストが出力されたので、
python inkscape2swfc_demo070.py start.svg > start.scで scファイルとして保存。
swfc.exe start.sc -o start.swfでswfに変換。しかし大量に警告が出る。出力された swf も、Flash Player 上で正常に表示されていない。
どうやら、swfc は相対座標の記述は受け付けないらしい。Inkscape のデフォルト設定はsvgを相対座標で出力する設定になっているため、出力された svg の中には相対座標で記述されていることを示す、小文字の「m」「c」が大量に入っている。それら小文字の「m」「c」をswfcが認識できていないように思える。
仕方ないので Inkscape の設定を変更。ファイル → Inkscape の設定 → SVG出力 → 相対座標を許可、のチェックを外してsvgを保存し直し。svgの中には絶対座標を示す大文字の「M」「C」が並んでいることを確認。
しかしそれでも、swfcの警告が大量に出る。どうも、svg 内の path データが、M x,y x,y C x,y と並んでいるあたりが怪しい。本来そこは、M x,y C x,y という形になるはずではあるまいか。余計に入ってる x,y 値は何を示しているのだろう。
M の後にひたすら x,y x,y x,y が並ぶ時は、単に直線が描かれることを示している模様。「C x,y」はベジェ曲線のコントロールポイント座標を示している。であれば、M x,y x,y C x,y という記述は正しい。最初に直線が描かれ、その次からベジェ曲線になっているというデータに過ぎないはず。
_SWFC Manual を眺めていると、どうも直線を示す場合には L x,y という記述が必要なように思えた。Inkscape は「L」を省略しても問題ないように作られているのだろう…。SVGの仕様書も眺めると、「L」を記述するほうが正しいように思えるが。最近の仕様では省略できるように変更されたのだろうか?
Inkscape の設定を眺めていたら、「強制的にコマンドを繰り返す」という項目が、逐一「L」をつけて出力する設定だと分かった。つまり。
- 「相対座標を許可」を無効に。
- 「強制的にコマンドを繰り返す」を有効に。
再度 sc に変換して、swfc で swf を出力。それらしい swf が出力された。Flash Player 上では正常表示されている。だが、FLASH CS5 に読み込ませると、正常表示されない…。
SWFC Manual に記載されているサンプル2つを swf に変換して FLASH CS5 に読み込ませてみたが、簡単な図形(house.swf)は表示できたものの、グラデーション図形(gradients.swf)は表示されなかった。つまり、swfc で出力した swf も、複雑な図形は FLASH CS5 側で正常に表示できない模様。
Flash Player では正しく表示される swf が FLASH CS5 では変な表示になるなんて、わけがわからないよ。何にせよ、これ以上 swfc に関して実験しても無駄なようだ。
◎ FLASH CS5の対応形式情報を眺めていて気が付いた。 :
_入出力ファイル対応形式 (Flash CS5)
ライブラリへ読み込みをする際のオープンダイアログでは、拡張子一覧の中に ai、dxf、swf しか無かったのに、サイト上の情報によると、emf、wmf も読み込み可能、と記載があることに気が付いた。
試しに Inkscape で emf 保存して、D&Dで FLASH CS5 のライブラリウインドウに放り込んだ。…開けた。各パーツも、ざっくり眺めた限りでは、それぞれベクター画像になっているように見える。
なんだよー。emfで渡せばいいのかよー。なんでオープンダイアログに並べておかないんだよー。わけがわからないよ。
ライブラリへ読み込みをする際のオープンダイアログでは、拡張子一覧の中に ai、dxf、swf しか無かったのに、サイト上の情報によると、emf、wmf も読み込み可能、と記載があることに気が付いた。
試しに Inkscape で emf 保存して、D&Dで FLASH CS5 のライブラリウインドウに放り込んだ。…開けた。各パーツも、ざっくり眺めた限りでは、それぞれベクター画像になっているように見える。
なんだよー。emfで渡せばいいのかよー。なんでオープンダイアログに並べておかないんだよー。わけがわからないよ。
◎ 色々実験してみたけれど。 :
色々と面倒臭くて、ますます Adobe純正アプリが嫌いになりました。
検索してみたが、FLASH CS5.5 もsvg未対応のようでガッカリ。CS6では対応してほしいが、望み薄な予感。
検索してみたが、FLASH CS5.5 もsvg未対応のようでガッカリ。CS6では対応してほしいが、望み薄な予感。
[ ツッコむ ]
以上です。