フリーのFlashコンパイラ swfmill のメモ。文字コードcp932まわり

パッチあてても外部 swf を読み込む時は -e cp932 指定が効かない様子。
 
Klab さんの cp932 パッチを使っているのですが
日本語を使っている Flash を flashlite 1.1 用にパブリッシュして、<clip> で組み込もうとすると, iconv エラーになってしまいました。
 
検証コード:

<?xml version=”1.0″ encoding=”cp932″?>
<movie compress=”false” version=”4″>
  <clip import=”cp932_problem_inc.swf” />
</movie>

実行コマンド:

swfmill -e cp932 simple cp932_problem.xml > out.swf

実行結果:

# Cygwin の場合
error : string is not in UTF-8
error : string is not in UTF-8
error : string is not in UTF-8
error : string is not in UTF-8
iconv failed: _等幅
iconv failed: はろーわーるど
 
# Linux の場合
error : xmlEncodeEntitiesReentrant : input not UTF-8
iconv failed: _ツ等幅
iconv failed: はろーわーるど

 
この結果として swf は出力されるものの文字化けしてしまいます。
 
ちなみに、clip に指定したのと同じ swf を “swfmill -e cp932 swf2xml” で実行してやった場合はもちろん正しく変換できます。
 
検証に使った swf/fla ダウンロード
 
参考:
swfmillでFlash Lite 1のswfを扱えるようにしてみた(Klab 株式会社)

フリーのFlashコンパイラswfmillのメモ。simple で扱う XML の書式とタグ一覧

swfmill の SWFML simple モードの基本的な使い方はここに書いているのですが、実際はもっと便利なタグがたくさんあります。

swfmill simple コマンドは swfmill xml2swf と同様、XMLからSWFを生成するコマンドですが、xml2swfより使いやすくなっています。


タグ一覧
■基本タグ
・<movie> (ルート要素)
SWFML simple の XML ルート要素です。
属性で swf のパブリッシュ用設定ができます。
 
全ての属性、および<frame>をのぞく子要素が省略可能です。
 
FlashLite 1.1 対応にする場合はFlashバージョン4(version=”4″),圧縮なし(compressed=”false”)にしなければなりません。
 
例: ステージサイズ240×320, フレームレート20fps, Flashバージョン4, 圧縮なしに設定

<?xml version=”1.0″ encoding=”UTF-8″?>
<movie width=”240″ height=”320″ framerate=”20″ version=”4″ compressed=”false”>
  <frame />
</movie>

 
・<meta> (親: <movie>)
swf のメタデータXMLを設定する。
 
例:携帯(DoCoMo)でメール転送禁止(フォワードロック)に設定する

<movie>
 <meta>
  <rdf:RDF xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”>
   <rdf:Description rdf:about=”” xmlns:swf=”http://ns.adobe.com/swf/1.0/”>
     <swf:forwardlock>True</swf:forwardlock>
   </rdf:Description>
  </rdf:RDF>
 </meta>
</movie>

 
・<background> (親: <movie>)
背景色を設定する。
 
例: 背景色を黒にする

<movie>
  <background color=”#000000″>
  <frame />
</movile>

 
・<frame> (親: <movie>, <clip>)
ムービークリップのキーフレームをあらわす要素で、この中にインスタンスを配置する。
ムービークリップをあらわす<movie>と<clip>の子要素として記述し、これらを定義する時は最低でも1個必須です。
<frame>がなくても動作しますが、誤動作の原因になるため省略すべきではありません。
 
属性:
name … フレーム名(省略可)
 
例:2つのキーフレームからなるムービークリップを定義する。

<movie>
 <frame>
    <!– 1フレーム目 –>
  </frame>
 <frame>
    <!– 2フレーム目 –>
  </frame>
</movie>

 
・<stop> (親: <frame>)
そのフレームを描画後、次のフレームに移らないようストップする。

<movie>
  <clip id=”img1″ import=”1.png”>
  <clip id=”img2″ import=”2.png”>
 
  <frame>
    <!– img1 を表示し、このフレームで停止する –>
    <place id=”img1″ depth=”1″/>
    <stop />
  </frame>
  <frame />
  <frame />
 
  <frame>
    <!– img2 を表示 –>
    <place id=”img2″ depth=”1″/>
  </frame>
</movie>

 
・<call>
指定したクラスメソッドをエントリポイントにする(要SMC + α)。
手順については「Adding components]」を参照。
  
属性:
object … 実行クラス
method … 実行メソッド


■リソース定義
フォント、シンボルなどの定義。
 
・<library> (親: <movie>, <frame>, <clip>)
<library>内に定義した<clip>, <sound>, <font>などリソース定義をライブラリとしてエクスポートし、
外部からそのリソースを参照できるようにする。
 
例: シンボル foo, boo をライブラリに登録する。

<movie>
  <library>
    <clip id=”foo” import=”abc.jpg”/>
    <clip id=”boo” import=”def.jpg”/>
  </library>
</movie>

 
・<clip> (親: <movie>, <library>, <frame>)
画像(PNG, JPEG)やムービークリップ(SWF), SVG などリソースを組み込み、参照できるように定義する。
<clip import=””> で指定したファイルはコンパイル時に読み込まれて一緒にビルドされます。
 
属性:
 id … シンボル名(省略時は名前なし)
 import … 組み込むリソースのファイル名(省略可)
 class … ムービークリップとしてシンボル化するクラス名(省略可。子要素とimport を両方省略時は必須?)
例: 画像ファイル foo.jpg を読み込んでシンボル名 image1 として参照できるようにする。

<movie>
  <clip id=”image1″ import=”foo.jpg” />
</movie>

例2: 新規ムービークリップをシンボル myMovie として定義する。

<movie>
  <clip id=”myMovie”>
    <frame />
  </clip>
</movie>

 
・<font> (親: <library>)
TrueType フォントを組み込み、ActionScript からの参照用に定義する。
 
・<sound> (親: <library>)
mp3 などサウンドファイルを読み込み、ActionScript からの参照用に定義する。
例:

<library>
  <sound id=”sound1″ import=”music.mp3″/>
</library>

 
・<textfield> (親: <movie>, <library>, <frame>)
テキストを入れるラベルを定義する。
 
属性:
id … シンボル名
name … 同期する変数名
text … 表示するテキスト
x … X座標
y … Y座標
width …
height …
size …
leading …
wordWrap …
isHTML …
multiLine …
password …
readOnly …
autoSize …
notSelectable …
hasBorder …
useOutlines …
align …
leftMargin …
rightMargin …
indent” …


■インスタンスの配置
ムービークリップ内へのシンボル配置など。
 
・<place> (親: <frame>)
定義済みシンボルを配置する。
属性:
 id … インスタンス化するシンボルの名前(必須)。
 name … ActionScript での参照用インスタンス名(省略時は名前なし)
 x, y ・・・ 座標(ピクセル。省略時は (0, 0))
 depth … 深度(数値で表し、大きいほど手前)
 scale … 表示倍率(省略時は 1.0)
 
例: シンボル image1 をインスタンス化し、座標 (0,50) に等倍配置し、その上に座標 (25,30) にサイズ1/2で配置する。

<clip id=”image1″ import=”foo.jpg” />
<frame>
  <place id=”image1″ x=”0″ y=”50″ depth=”1″/>
  <place id=”image1″ x=”25″ y=”30″ scale=”0.5″ depth=”2″ />
</frame>

 
・<import>(親: <frame>)
任意の URL のムービーを動的に読み込み配置する。
ActionScript の loadMovie(url) と同様の動作。
例:

<frame>
  <import url=”http://example.com/foo.swf”></import>
</frame>


■その他
・swfmill だけで ActionScript を埋め込む
<movie> や <clip> 内の <frame>〜</frame> に <DoAction> 要素を入れると、
そのフレーム上のアクションスクリプトとして実行できます。
 
<DoAction>は SWF のアセンブラでの書き方になるため、別環境で作った swf ファイルを swf2xml で変換して <DoAction>以下を抽出するのが楽な方法です。
 
例: Flash lite 1.1 用 ActionScript を埋め込む。

<?xml version=”1.0″ encoding=”UTF-8″?>
<movie version=”4″ compressed=”false”>
  <frame>
   <!– ムービークリップインスタンス mc1 を配置(参照用) –>
   <clip id=”mc” import=”myMC.swf” />
   <place id=”mc” name=”mc1″ depth=”0″ />
   <!– 簡単な ActionScript を _root で実行 –>
   <DoAction>
    <actions>
      <!– _root.foo = 123; を実行。 –>
      <PushData>
        <items>
          <StackString value=”/:foo”/>
        </items>
      </PushData>
      <PushData>
        <items>
          <StackString value=”123″/>
        </items>
      </PushData>
      <SetVariable/>
   
      <!– mc1.msg = “Hello”; を実行 –>
      <PushData>
        <items>
          <StackString value=”mc1:msg”/>
        </items>
      </PushData>
      <PushData>
        <items>
          <StackString value=”Hello”/>
        </items>
      </PushData>
      <SetVariable/>
      <EndAction/>
    </actions>
   </DoAction>
   <!– ActionScript ここまで –>
  </frame>
</movie>


参考:
Using swfmill to create SWFs without Flash(公式)
swfmill Open Source Flash WiKi
SWFMLl DTD
swfmil の XML 書式定義

フリーのFlashコンパイラswfmillの、xml2swf と simple の違い

swfmill で扱う XML の書式は二通りあります。
一つ目は swfmill xml2swf や swfmill swf2xml でのコンパイル/逆コンパイルで扱う書式です。
ルート要素は <swf> で、SWF のバイナリ構造を XML であらわしたもののようで、
埋め込み画像のバイナリを base64 エンコードで指定したり、埋め込みデータがラスタかベクタかによって、指定方法が異なっていたりとなかなか直感的には扱えません。
用途としては swf2xml で逆コンパイルしてからデータを差し替えて再コンパイルする時などに使います。読み解く場合は swf 仕様書が参考になるでしょう。処理の流れについては「SWF フォーマットの変遷からみる Flash(daily dayflower)」が纏まっていてわかりやすいです。ActionScript についてはこちらの記事に書きましたのでご参照ください。
 
二つ目が swfmill simple で扱う、人が読みやすい書式です。ルート要素は <movie> で、前者の書式に比べてライブラリへの取り込みとステージへの配置などがより直感的に行えるようになっているので、自分で XML を書き起こして Flash を作成する場合に使えます。
 
参考:
swfmill swf2xml and xml2swf(公式)
swfmillでFlash Lite 1のswfを扱えるようにしてみた(KLab 株式会社)
SWF File Format Specification

Google Ad Planner で好きなサイトを統計分析

Google Ad Planner
 
最近話題なので使ってみた。
ためしに自サイトや会社サイト、有名サイトをやってみたらサイトごとに性別、年代等傾向が出ていて面白いですね。
 
簡単な使い方は次のようなかんじです。
 
1. View a site listing の欄にドメイン入力(ログイン不要)
2. 訪問者がよく見る別サイトや検索キーワードが表示される
3. 分析対象の国を指定(Japan)すると、訪問者の性別や学歴、収入分布までグラフ化。すごい。
 
参考:
Google Ad Planner(アドプランナー)で“あのサイトのPVやUU”を調べてみよう!

フリーで使える駅の座標情報データベース

http://www.ekidata.jp/
– 無料ダウンロード「駅データ.jp」
 
駅の情報(都道府県、駅名、路線、会社、地図座標等)がCSV形式でダウンロードできます。商用でも使え、最新の駅にも対応しているのがいいですね。

ImageMagick – 画像から EXIF 情報や余分なコメント領域を削除するには

ImageMagick の convert では画像を加工しても基本的にコメント領域など付属的なデータを維持してくれます。
 
これはこれで便利なのですが画像サイズを削減したい場合はアプリケーション固有の情報(JPEG の Exif など)やコメントなどは極力取り除きたいものです。
 
ImageMagick でこれを実現するには -strip オプションを使います。
ImageMagick Command-line Options – -thumbnail

-strip
strip the image of any profiles or comments.

 
用例は次のとおりです。
 
– in.jpg から EXIF 情報等を除去し、out.jpg として保存する。

convert in.jpg -strip out.jpg

 
他の方法としては
-profile,+profile (任意のプロファイルを削除/追加する。-profile * で全てのプロファイルを削除)や,
-thumbnail (-thumbnail 320×240 は -strip と -resize 320×240 を指定するのとほぼ同じ) といったものがあります。

FlashDevelop – Flash/Flex フリー開発環境

FlashDevelop.org
 
無料で使える Flash/Flex 開発環境です。
*.as を *.swf へビルドできるのはもちろんのこと、デバッガつきでの実行やアクションスクリプトの文法チェッカ、コードアシストのような開発者にはなくてはならない機能まで充実しています。
 
基本英語ですが、設定により日本語も使えます(日本語設定については参考サイトを参照)。
AS3.0 にも対応しているので、コードベース開発なら本家 Adobe よりも FlashDevelop のほうが断然使い勝手がいいですね。
 
参考:
7つのステップで完成!FlashDevelopカスタマイズの奥義(_level0.CAYAC)