tamanegiの日記: Haxe(flash)でswf読み出しと書き出し
とりあえずできたのでメモ。簡単なデータなら置き換えられる。
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 );
}
}
}
Haxe(flash)でswf読み出しと書き出し More ログイン