パスワードを忘れた? アカウント作成
10723966 journal
日記

tamanegiの日記: Haxe(flash)でswf読み出しと書き出し

日記 by tamanegi

とりあえずできたのでメモ。簡単なデータなら置き換えられる。
formatライブラリ(って呼び方でいいのか?)必須。
Haxe本体もかなり新しくないと動かない悪寒。

import haxe.io.BytesInput;
import haxe.io.BytesOutput;
import flash.net.FileReference;
 
class Main {
  static function main() { new Main(); }
 
  public function new() {
    var stage = flash.Lib.current.stage; // Stage
    var info = stage.loaderInfo;         // LoaderInfo
    //// load bytes of current swf
    var myself = info.bytes;             // ByteArray
    var swfinp = new BytesInput( haxe.io.Bytes.ofData( myself ) );
    var reader = new format.swf.Reader( swfinp );
    var swf = reader.read();
    swfinp.close();
 
    //// do something if necessary
    //for ( i in 0 ... swf.tags.length ) {
    //  var tag = swf.tags[i];
    //  trace( tag );
    //  switch( tag ) {
    //    case TBinaryData( id, data ): // example
    //    case _:
    //  }
    //}
 
    //// request compress; loaded swf seems to be uncompressed
    swf.header.compressed = true;
 
    var swfout = new BytesOutput();
    var writer = new format.swf.Writer( swfout );
    writer.write( swf );
    //// get byte data
    var data = swfout.getBytes(); // haxe.io.Bytes
    var fref:FileReference = new FileReference();
    try {
      //// haxe.io.BytesData is platform dependent and is ByteArray in flash
      //// This may not work on web browsers due to a security reason.
      //// An event handler might be required for an actual use.
      fref.save( data.getData(), "a.swf" );
    } catch( e:flash.errors.Error ) {
      trace( "ErrorID: " + e.errorID + " Message: " + e.message );
    }
  }
}

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...