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));
- zlib 関連のサイトまとめ > http://pwiki.awm.jp/~yoya/?zlib
あと、zip_inflate は開始オフセット指定できないので、substr(2) という勿体ない処理をする必要があります。改造しよう。そうしよう。
TODO
- オフセット指定
- ストリーム対応 (又は resume 機能)
その他
あと、JPEG の不具合も治しました。JPEGTables を処理出来てませんでした。
失礼。