mieki256's diary



2011/12/05(月) [n年前の日記]

#1 [flash] FLASH CS5にswfを読み込ませる実験をしてみたり

FLASH CS5のライブラリにベクター画像を放り込みたいわけですよ。なので、svg を swf に変換して読み込ませられないものかと。

swfmillでsvgをswfに変換。 :

_swfmill swf2xml and xml2swf

以下の内容を 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スクリプトが以前は公開されていたらしい。試しに使ってみたり。

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」をつけて出力する設定だと分かった。つまり。
  • 「相対座標を許可」を無効に。
  • 「強制的にコマンドを繰り返す」を有効に。
…すれば、swfc に渡せる svg が出力できそうだ。

再度 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で渡せばいいのかよー。なんでオープンダイアログに並べておかないんだよー。わけがわからないよ。

色々実験してみたけれど。 :

色々と面倒臭くて、ますます Adobe純正アプリが嫌いになりました。

検索してみたが、FLASH CS5.5 もsvg未対応のようでガッカリ。CS6では対応してほしいが、望み薄な予感。

以上です。

過去ログ表示

Prev - 2011/12 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project