総ロスレス化
久しぶりにJSFLをいじった。
JSFLとは、Adobe Flash上で使えるJavaScriptコマンドのこと。ちょっとあれを自動化したい、とかそういうときに使うと便利。
jsflの内容
作りたかったのは、「ライブラリ」内にある「ビットマップ」のパラメータの「圧縮」設定をすべて「ロスレス (PNG/GIF)」にするスクリプト。
ライブラリ内に読み込んだときに、一体どういうルールでこれが切り替わるのか分からないのですが、とにかく統一されない。ピクセル単位でデザインされたモノを画像として取り込み配置して、それをパブリッシュして、しばらく眺めていたら一部分の画像だけ粗いことに気づいて、調べてみると「写真画質 (JPEG)」になり、JPEG圧縮がかかっていることがあるのです。
これ、1個1個直す手間は、まぁ良しとしても、抜けがあるかも?とか思い始めると、再チェックにかなり負担がかかる。
でも、この設定を自動化するスクリプトを書くのにどれだけ時間がかかるか分からなかったから、なかなか書けずにいたのです。
ちょっとネットで調べて、あとはヘルプを見ながら書いたら数分で書けた。素直なアクセスが許されているようで、簡単でした。以下にそれを載せておきます。
/** * ライブラリ内にあるビットマップを全てロスレスにするJSFL. * @author octech * @since 2009-01-07 * @version 1.0 */ fl.outputPanel.clear(); fl.trace( "== SetAllLibImagesToLossless ==" ); var items = fl.getDocumentDOM().library.items; var numItems = items.length; for( var i=0; i<numItems; i++ ){ var item = items[i]; if( item.itemType == 'bitmap' ){ fl.trace( ">"+item.name ); // スムージング:Boolean item.allowSmoothing = false; // 圧縮タイプ:"lossless","photo" item.compressionType ="lossless"; } }
使い方
去年のエントリに書いているのですが、使い方は、上記スクリプトを "SetAllLibImagesToLossless.jsfl" というファイル名で保存して、コマンドの置き場にコピーするだけです。
置き場所は「Windows環境の自分の場合なら、C:\Documents and Settings\<ユーザー>\Local Settings\Application Data\Adobe\Flash CS3\ja\Configuration\Commandsという場所になります。」
Flashの「コマンド」メニューのに追加されているのが分かります。このとき、Flashを立ち上げていても、アプリ再起動は不要です。
JSFL、便利便利!