フラッシュのサイズの取得についてのメモですが、公開する以上は解り易くするため実例も用意しました。
フラッシュのフォーマットは一応公開されておりますが、フラッシュのサイズに関しては多くの画像フォーマット同様ヘッダ部分で調べられるようです。
ファイルの先頭からは以下のデータが並びます。
さて、問題のビット列は以下のようになっております。
尚、ビット形式のデータは上位ビットから切り出す事とします。
このデータ列に後続するデータは新たなオクテットから始めます。
また、単位はピクセル数ではなく、twitと呼ばれる値で、これは20分の 1ピクセルと見なせます。
従ってピクセル単位で取得する場合は、得られた値を20で割る事となります。
実際のサイズに関するデータは以下のようになります。
ここで、最小値
と最大値
と二つの値がありますが、これはこのデータ形式が実際にフラッシュに使われる各画像のデータの大きさを表す際にも使われる共通の形式となっているためです。
フラッシュ全体の大きさとしては、最大値も最小値も同じ値のようです。
ここでは、Perlを用いてコーディングしてみました。
尚、現行のフラッシュでは圧縮する事も出来ますが、ここでは無圧縮のSWFファイルを扱うものと仮定してコーディングします。
open (F, 'hoge.swf') || die 'Not Found?';
binmode (F);
read (F,$data,41);
#データの最大値は41バイト。close(F);
die "Illegal Format!" if substr($data,0,3) ne 'FWS';
$data=substr($data,8);
$i=ord($data) >> 3;
$d=unpack("B*",$data);
#幅。$x=substr($d,$i+5,$i);
$x1=unpack('N',pack('B32',substr(('0' x 32).$x,-32,32)));
$x1=int($x1/20);
#高さ。$y=substr($d,$i+$i+$i+5,$i);
$y1=unpack('N',pack('B32',substr(('0' x 32).$y,-32,32)));
$y1=int($y1/20);
#結果。print "width : $x1\n","height: $y1\n";
ここでは、コマンドラインで実行するスクリプトとして書いているため、CGIなどで利用するには少し書き換える必要があるかも知れません。
実際にフラッシュをこのスクリプトで調べてみましょう。
このフラッシュを一行目に指定したスクリプトをコマンドラインで実行します。