SWFEditorJS CWS対応

iz 先生の zip_inflate を利用して、Flash SWF の CWS (圧縮フォーマット)になんちゃって対応しました。

if (this.swfheader.Signature === "CWS") {
    if (isCompleted) {
        var header_data = data.substr(0, 8);
        var zlib_data = data.substr(10); // Zlib header skip (n=2)
        var movie_data = zip_inflate(zlib_data);
        bs.input(header_data + movie_data);
    } else {
        return ; // skip
    }
}

(なんちゃってと言っているのはストリーム対応してなくて、まだ読み込み中の進捗バーが出せないのが悔しいからです)

↑ここで公開されている zip_inflate function は、Zlib コンテナでなく、その中身の Deflate ストリームを処理するので、Zlib データを伸長したい場合は、Zlib ヘッダの2byte (本当はその中身に依っては更に4byteなんだけど、とりあえず無視) をスキップして zip_inflate を呼び出すと丁度良いです。(それで、PHP の gzuncompress 相当の動きになります)

              <- zlib_infrate はここを解く->
+-----------------------------------------+
|  Zlib ヘッダ  |  Deflate ストリーム     |
+-----------------------------------------
<- 2 bytes ->
  • つまり、↓こういう事
data = zip_inflate(zlibdata.substr(2));

あと、zip_inflate は開始オフセット指定できないので、substr(2) という勿体ない処理をする必要があります。改造しよう。そうしよう。


TODO

  • オフセット指定
  • ストリーム対応 (又は resume 機能)

その他

あと、JPEG の不具合も治しました。JPEGTables を処理出来てませんでした。
失礼。