Как конвертировать SWF / DisplayObject в данные SVG? - PullRequest
3 голосов
/ 01 июля 2011

Есть что-нибудь, что может преобразовать Swf или DisplayObject в SVG?

Я пытаюсь найти способ генерирования JPG большого размера из формы swf / vector.Текущий экспорт jpg () из AS3 имеет ограничения по размеру и разрешению jpg.

, поэтому я решил, что могу просто отправить данные SVG в ImageMagick.

спасибо!

artur

Ответы [ 2 ]

6 голосов
/ 30 августа 2011

Если это сложный SWF-файл, вам может потребоваться декомпилировать его с помощью подходящего инструмента, а затем импортировать векторные активы и конвертировать / повторно сохранять их как SVG.

Если это просто фигуры (без растровых изображений / фигур)вы можете использовать потрясающую библиотеку AS3SWF , и это 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";
        }

    }

}

Вы можете запустить его здесь .

SWF2SVG preview

0 голосов
/ 05 февраля 2012

Для использования на сервере вы можете использовать этот пакет Python http://pypi.python.org/pypi/pyswf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...