2011-07-01 14 views
3

SwfやDisplayObjectをSVGに変換できるものはありますか?SWF/DisplayObjectをSVGデータに変換する方法は?

swf /ベクトルシェイプから大きなサイズのJPGを生成する方法を見つけようとしています。 AS3の現在のjpg export()には、jpgサイズと解像度の制限があります。

私はImageMagickにSVGデータを送ることができると思いました。

ありがとうございました!

アルトゥル

答えて

5

それは複雑なSWFだ場合、あなたは適切なツールを使用して、それを逆コンパイルして、ベクトル資産をインポートし、変換/ SVGとして保存再する必要があります。

シェイプ(ビットマップ/シェイプなし)の場合は、awesome AS3SWF libraryとSVGhapeExporterを使用できます。

ここでは簡単クラスです:

package { 
    import com.bit101.components.*; 
    import com.codeazur.as3swf.*; 
    import com.codeazur.as3swf.exporters.SVGShapeExporter; 
    import com.codeazur.as3swf.tags.*; 
    import com.codeazur.as3swf.tags.*; 

    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 
    import flash.utils.*; 


    public class SWF2SVG extends Sprite { 

     private var swfFile:FileReference; 
     private var svgFile:FileReference; 
     private var status:Label; 
     private var load : PushButton; 
     private var save : PushButton; 
     private var svg:XML; 
     private var filename : String; 

     public function SWF2SVG() { 
      init(); 
     } 
     private function init():void{ 
      stage.align = StageAlign.TOP_LEFT; 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      drawGUI(); 
     } 
     private function drawGUI() : void { 
      var vbox:VBox = new VBox(this); 
      var buttons:HBox = new HBox(vbox); 
      load = new PushButton(buttons,0,0,"Load SWF",selectSWF); 
      save = new PushButton(buttons,0,0,"Save SVG",selectSVG);save.enabled = false; 
      status = new Label(buttons,0,0,'load a SWF file'); 
     } 
     private function selectSWF(event:MouseEvent):void{ 
      swfFile = new FileReference(); 
      swfFile.addEventListener(Event.SELECT,swfSelected); 
      swfFile.addEventListener(Event.COMPLETE,swfLoaded); 
      swfFile.browse([new FileFilter("SWF File (*.swf)", "*.swf")]); 
     } 
     private function selectSVG(event:MouseEvent):void{ 
      svgFile = new FileReference(); 
      var bytes:ByteArray = new ByteArray(); 
      bytes.writeUTFBytes(svg); 
      svgFile.save(bytes,filename.replace('.swf','.svg')); 
     } 
     private function swfSelected(event:Event):void{ 
      swfFile.load(); 
      filename = swfFile.name; 
      save.enabled = false; 
     } 
     private function swfLoaded(event:Event):void{ 
      var bytes:ByteArray = swfFile.data; 
      var swf:SWF = new SWF(bytes); 
      var svgExporter:SVGShapeExporter = new SVGShapeExporter(swf); 
      for (var i:uint = 0; i < swf.tags.length; i++) { 
       var tag:ITag = swf.tags[i]; 
       if (tag is TagDefineShape) TagDefineShape(tag).export(svgExporter); 
      } 
      svg = svgExporter.svg; 
      if(svg != null){ 
       status.text = "ready! save the SVG file"; 
       save.enabled = true; 
      }else status.text = "no shapes to export found"; 
     } 

    } 

} 

あなたはhereそれを実行することができます。 https://github.com/flying-sheep/SWF2SVG( `:

SWF2SVG preview

+1

を使用することができます。空気 "ファイルは自己署名されているので、このコードをコンパイルしていると私に信じなければなりません;)) –

+0

これは非常にクールです。 –

+0

あなたがそれを気に入ってうれしいです。それはLinux上で動作しないことがあまりにも悪い:( –

0

は、サーバーの使用のために、あなたは私はあなたのコードからインスピレーションを得たAIRアプリを作ったこのPythonパッケージhttp://pypi.python.org/pypi/pyswf

関連する問題