Coder Social home page Coder Social logo

as3swf's Introduction

Me sitting at a round table with a Commodore 64, hands on the keyboard, looking at the screen

Me at work (home office, 1985)

as3swf's People

Contributors

claus avatar dmitriyyukhanov avatar imcotton avatar makc avatar rickyabell avatar sbijoshj avatar soywiz avatar timknip2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

as3swf's Issues

Position of path incorrect when exporting as SVG

The g tag should have a transform attribute to specify the position of the path. Currently the path always starts at 0, 0.

I noticed all TagDefineShape in the SWF, their shapeBounds have x =0 and y=0.

Text Problems

Text are not being rebuilt properly.

I created an swf with a text on it, (static/dynamic) and rebuilt the swf without touching anything.

Text came out wrong.

Missing SWFMorphFillStyle's?

This error is happening in 'SwfTimelineContainer.as' when I try to load a swf. I'm guessing these are Morph targets blowing up the parser. I have shared an example FLA and SWF here which cause the problems. I can't actually find the frame that is causing the problem.

FLA: http://dl.dropbox.com/u/224564/problemAsset.fla
SWF: http://dl.dropbox.com/u/224564/problemAsset.swf

Error: Unknown fill style type: 0x13
    at com.codeazur.as3swf.data::SWFMorphFillStyle/parse()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\data\SWFMorphFillStyle.as:48]
    at com.codeazur.as3swf.data::SWFMorphFillStyle()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\data\SWFMorphFillStyle.as:22]
    at com.codeazur.as3swf::SWFData/readMORPHFILLSTYLE()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\SWFData.as:593]
    at com.codeazur.as3swf.tags::TagDefineMorphShape2/parse()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\tags\TagDefineMorphShape2.as:36]
    at com.codeazur.as3swf::SWFTimelineContainer/parseTag()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\SWFTimelineContainer.as:185]
    at com.codeazur.as3swf::SWFTimelineContainer/parseTagsAsyncInternal()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\SWFTimelineContainer.as:137]
    at com.codeazur.as3swf::SWFTimelineContainer/parseTagsAsyncHandler()[C:\Users\hclark\popcap\sb-trinket-tool\src\com\codeazur\as3swf\SWFTimelineContainer.as:130]

I changed the code to not throw an error and I get the following style requests:
Encountered unknown fill style type: 0x13
Encountered unknown fill style type: 0xb5
Encountered unknown fill style type: 0xff
Encountered unknown fill style type: 0x31
Encountered unknown fill style type: 0xdb
Encountered unknown fill style type: 0x34
Encountered unknown fill style type: 0x8b
Encountered unknown fill style type: 0xd6
Encountered unknown fill style type: 0x34
Encountered unknown fill style type: 0x4e
Encountered unknown fill style type: 0x4
Encountered unknown fill style type: 0xd4
Encountered unknown fill style type: 0xce
Encountered unknown fill style type: 0x8c
Encountered unknown fill style type: 0x3
Encountered unknown fill style type: 0xc6
Encountered unknown fill style type: 0xa1
Encountered unknown fill style type: 0x63
Encountered unknown fill style type: 0x3e
Encountered unknown fill style type: 0x3e
Encountered unknown fill style type: 0x9d
Encountered unknown fill style type: 0x89
Encountered unknown fill style type: 0x1e
Encountered unknown fill style type: 0x86
Encountered unknown fill style type: 0xe8
Encountered unknown fill style type: 0xf1
Encountered unknown fill style type: 0x2
Encountered unknown fill style type: 0x58
Encountered unknown fill style type: 0x79
Encountered unknown fill style type: 0xff
Encountered unknown fill style type: 0xbd
Encountered unknown fill style type: 0xb2
Encountered unknown fill style type: 0x4f
Encountered unknown fill style type: 0x86
Encountered unknown fill style type: 0x86
Encountered unknown fill style type: 0x2b
Encountered unknown fill style type: 0x26
Encountered unknown fill style type: 0x5b
Encountered unknown fill style type: 0xff
Encountered unknown fill style type: 0x1b
Encountered unknown fill style type: 0x77
Encountered unknown fill style type: 0x3a
Encountered unknown fill style type: 0x31
Encountered unknown fill style type: 0xf7
Encountered unknown fill style type: 0xfd
Encountered unknown fill style type: 0x64
Encountered unknown fill style type: 0x70
Encountered unknown fill style type: 0x63
Encountered unknown fill style type: 0x7c
Encountered unknown fill style type: 0x7f
WARNING: parse error: Unknown fill style type: 0x35, Tag: DefineMorphShape2, Index: 15

optimize exportBitmapData

_bitmap = _loader.contentLoaderInfo.content as Bitmap;
_onCompleteCallback(_bitmap);
or
_onCompleteCallback(_bitmap.bitmapData);

little careless in com.codeazur.as3swf.data.filters.FilterDropShadow

    override public function parse(data:SWFData):void {
        dropShadowColor = data.readRGBA();
        blurX = data.readFIXED();
        blurY = data.readFIXED();
        angle = data.readFIXED() ; //  →  angle = data.readFIXED() * 180 /Math.PI;
        distance = data.readFIXED();
        strength = data.readFIXED8();
        var flags:uint = data.readUI8();
        innerShadow = ((flags & 0x80) != 0);
        knockout = ((flags & 0x40) != 0);
        compositeSource = ((flags & 0x20) != 0);
        passes = flags & 0x1f;
    }

effect: get filter can not get correct dropShadowFilter

    override public function get filter():BitmapFilter {
        return new DropShadowFilter(
            distance,
            angle,             // need angle not radian
            ColorUtils.rgb(dropShadowColor),
            ColorUtils.alpha(dropShadowColor),
            blurX,
            blurY,
            strength,
            passes,
            innerShadow,
            knockout
        );
    }

thank you for the amazing project!

sorry for my bad english...

PS:如果你懂得中文...
以下为错误的中文简述:

在com.codeazur.as3swf.data.filters.FilterDropShadow类中

函数parse 读到的angle 是弧度值
在as3 中 DropShadowFilter 使用的是角度值
将angle 换算为角度值 才能得到正确的 BitmapFilter

filter包下的其他类 我没有尝试

感谢你 分享这么棒的 代码

以上问题 是我今天下载的 ZIP 中 遇到的

Scripts on Timeline

Hi All,

I am trying to determine how to make changes to scripts on the timeline. For example my original SWF has the following:

var filetype = "parent";

Any derivative from this SWF I would like to change the variable filetype to "child".

After looking at the "loaderInfo.bytes" in its raw format I am not able to find the code that is added to the timeline. I see that external classes can be referenced but that would mean that I would have to update the external class as well at run time.

Thanks...

Info

Is it possible to embed TTF font while creating new SWF using this lib ? If so, can you please give an example.
Thanks :)

NetStream

I am loading external SWFs and they are playing Video on the stage. I want to access the NetStream object itself in order to find out the URL of the playing mp4.

Can I do it with help of your lib?
Is there some kind methods for this?
Thanks in advance.

run-time variable injection?

Wasn't sure where best to bring this up, but I've a question about taking run-time display variables when using as3swf.

It seems like this could/can take "DisplayObject"s created at runtime (e.g. "MovieClip"s), and store them in the swf being created. Basically emulating the "DefineSprite" tag, but, also recursively scanning through adding children, retaining matrix information (position, scaling etc) for all children of the added object.

Something akin to;

var asset:DisplayObject; // thing that's full of visuals altered at run-time
var assetTag:TagDefineSprite = new TagDefineSprite();
assetTag.ParseAsset( asset );
var swf:SWF = new SWF();
swf.tags.push( new TagFileAttributes() );
swf.tags.push( assetTag );
...

Is there a way of doing this?

Perhaps some way of serialising "DisplayObject"s into "ByteArray"s that "SWF" could take as a valid constructor parameter, like how stage.loaderInfo.bytes can be used. I know that ByteArray.writeObject( obj ) doesn't play well with MovieClips, but is there a nice away around this?

It seems like a pretty useful thing if it is possible, so I'm surprised no else has asked... (sorry if this is because the answer is obvious!)

Button instance handlers in published as2 swf don't works

So, lets load as2 swf

var ldr:URLLoader = e.target as URLLoader;
parsedSWFBytes = ldr.data;

// do nothing re-publish it only
var swf:SWF = new SWF (parsedSWFBytes);
parsedSWFBytes = new ByteArray();
swf.publish(parsedSWFBytes);

// load it with loader.loadBytes or save FileReference

Buttons had on (release) handler don't work. checked both swfs (original and saved) with Swix and not found any differences.. if open in Swix saved with Filereference swf - and save it from Swix - buttons work as usual

ReferenceError: Error #1069: Property undefined not found on __AS3__.vec.Vector.<com.codeazur.as3swf.tags::ITag> and there is no default value.

I've been playing around with as3swf and am very impressed with what it can do. I've tested it on a number of SWFs and most of them work properly, but I've run into an error.

Here's the stacktrace:
ReferenceError: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value.
at com.codeazur.as3swf::SWF/getTagByCharacterId()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:48]
at com.codeazur.as3swf::SWFTimeline/getTagByCharacterId()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:86]
at com.codeazur.as3swf::SWFTimeline/buildLayers()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:324]
at com.codeazur.as3swf::SWFTimeline/parseFinalize()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:175]
at com.codeazur.as3swf::SWFTimeline/parse()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWFTimeline.as:92]
at com.codeazur.as3swf::SWF/parse()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:68]
at com.codeazur.as3swf::SWF/loadBytes()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:55]
at com.codeazur.as3swf::SWF()[/Users/claus/Projects/as3swf/src/com/codeazur/as3swf/SWF.as:34]
at com.SWFScraper::SWFScraper/processByteArrays()[C:\Users_\SWFDetailsExtractor\src\com\SWFScraper\SWFScraper.as:105]
at com.SWFScraper::SWFScraper/loadedSWF()[C:\Users
_\SWFDetailsExtractor\src\com\SWFScraper\SWFScraper.as:88]

and the console output in FlashDevelop:
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 299
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 325
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 350
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 368
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 384
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 402
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 502
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 641
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 654
WARNING: parse error: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value., Tag: DefineSprite, Index: 693
[Fault] exception, information=ReferenceError: Error #1069: Property undefined not found on AS3.vec.Vector.com.codeazur.as3swf.tags::ITag and there is no default value.

Is there any known reason it would try pull a value from the timeline dictionary that doesn't exist?
Thanks

defineShape3 - defineFont3

Hi Claus, this lib is really powerfull stuff ! thanks for putting this online !

but - I can`t seem to get some swf file converted, they all have defineShape3 and defineFont3 in them. These were swf file created with illustrator.

If I flatten them in flash, they will export to svg just fine.

Is there any quick workaround I could do to have these shape/group of shape exported ?
I found that if I use this statement, - if ( !defineShape || !defineShape.shapes ) continue;
the shape will be exported but no matrix will be accounted for.

text does not seem to render at all.

here are two example files.

file with defineShape3 - http://atomikspace.com/transfer/A.swf
file flatten to use defineShape4 - http://atomikspace.com/transfer/b.swf

any help will be Insanely appreciated !

Is there a way to convert TagDoABC.bytes to a more human readable value ?

This is not a bug, but more of a question.

I've loaded a basic SWF and traced the bytes from a TagDoABC. I could recognize a lot of the elements, knowing the original code, but I was wondering if there is a way to convert this to a more readable format.

If so, how ?

Thank you for your time,
George

Modyfied BinaryData does not publish

Hi. Great piece of software! I'm trying to modify an embed text file with your library, but after publishing there is no change... My code:

package{
    import com.codeazur.as3swf.SWF;
    import com.codeazur.as3swf.SWFData;
    import com.codeazur.as3swf.tags.TagDefineBinaryData;

    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.text.TextField;

    import mx.core.ByteArrayAsset;

    public class Test extends Sprite{       
        [Embed(source="test.txt",mimeType="application/octet-stream")] private var text:Class;

        public function Test(){
            var textField:TextField = new TextField();

            textField.text = ByteArrayAsset(new text()).toString();

            addChild(textField);

            var swf:SWF = new SWF(root.loaderInfo.bytes);

            trace(swf);

            var tag:TagDefineBinaryData = swf.getCharacter(1) as TagDefineBinaryData;

            trace(tag);

            tag.binaryData.clear();
            tag.binaryData.writeMultiByte("this is a new value", "iso-8859-1");

            trace(tag);

            var ba:SWFData = new SWFData();
            swf.publish(ba);

            var loader:Loader = new Loader();
            loader.x = 200;
            loader.loadBytes(ba);
            addChild(loader);
        }
    }
}

Broken Examples

The "4 - PublishModifiedLogo.fla" and "5 - ShapeExportLogo_AS3.fla" examples are not compiling because it looks like the getTagByCharacterId( characterId:uint ) method of the SWFTimelineContainer.as class changed to getDefinition( characterId:uint ).

Info

Can i use this lib if the target SWF to edit are built with AS2?

Missing vows for LTS

When creating this package you should've committed to supporting this open source package till death do you part. If you don't continue to develop this package you will ruin the sanctity of free and open source development forever. You not developing this package further is encroaching on my right to free quality software! 😺

[Bug] Matrix rotation format needs to be in radians

When generating a matrix from Matrix.createBox the rotation value needs to be in radians

in SWFShape line 408:
matrix.createBox(m.xscale / 20, m.yscale / 20, m.rotation, m.translateX / 20, m.translateY / 20);

the value is defined in degree's

SWFShape::export - conceptually wrong?

Hi Claus,

I stumbled on a problem with SWFShape.export()

The problem being that "fills" are exported first and the "strokes" after that.

This gives z-sort problems between fill / stroke when the shape for example contains multiple overlapping filled and stroked rectangles. The current export seems to assume that a Shape contains only a single primitive.

Maybe better if DefaultShapeExporter would have a method like:
beginStyle ( lineStyle, fillStyle )
beginPath()
...
endPath()
So exporters know both lineStyle and fillStyle for the current path? (just thinking aloud)
=> with benefit of not needing SWFShape::exportLinePath() ;-)

Maybe I'm missing something, if so ignore.

Regards,
Tim

How to export Embeds ?

Hi again,

Was wondering what is the best way to export embeds, currently this doesn't work in easyWorker:

PBPickingCollider_RayTriangleKernelClass is a pixelbender embed that is part of the away3d library:

public class PBPickingCollider extends PickingColliderBase implements IPickingCollider
{
[Embed("/../pb/RayTriangleKernel.pbj", mimeType="application/octet-stream")]
private var RayTriangleKernelClass:Class;

After publishing and loading the swf that use it:

Worker 2: [Fault] exception, information=ReferenceError: Error #1065: Variable PBPickingCollider_RayTriangleKernelClass is not defined.

All what I do is taken the ABC Code, the TagSymbolClass and I even tried to publish the TagExportAssets from the orignal one but with no success.

Thanks,
-Fred

求大神指教如何把一段影片剪辑写入到swf文件中

import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.events.Event;
import com.codeazur.as3swf.SWF;
import flash.net.URLRequest;
import flash.filesystem.File;
import flash.utils.ByteArray;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import com.codeazur.as3swf.tags.TagFileAttributes;
import com.codeazur.as3swf.tags.TagEnd;
import com.codeazur.as3swf.tags.TagDefineSprite;
import com.codeazur.as3swf.tags.TagShowFrame;
import com.codeazur.as3swf.data.SWFMatrix;
import com.codeazur.as3swf.tags.TagPlaceObject;

var urlLoader:URLLoader = new URLLoader();
urlLoader.load(new URLRequest(File.desktopDirectory.resolvePath("a.swf").nativePath));
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(Event.COMPLETE,onCmp);

function onCmp(e:Event):void{
var swf:SWF = new SWF(e.currentTarget.data);
var tagSpr:TagDefineSprite;
for(var i:int =0;i<swf.tags.length;i++){
if(swf.tags[i] is TagDefineSprite){
tagSpr = swf.tags[i] as TagDefineSprite;
}
}

var newswf:SWF = new SWF();
newswf.tags.push(new TagFileAttributes);
newswf.tags.push(tagSpr)

var tagPlaceObj:TagPlaceObject = new TagPlaceObject();
tagPlaceObj.hasCharacter = true;
tagPlaceObj.characterId = 2;
tagPlaceObj.depth = 99;
tagPlaceObj.hasMatrix = true;
tagPlaceObj.matrix = new SWFMatrix();
newswf.tags.push(tagPlaceObj);
newswf.tags.push(new TagShowFrame);
newswf.tags.push(new TagEnd);

var ba:ByteArray = new ByteArray();
newswf.publish(ba);

var fileStream:FileStream = new FileStream();
fileStream.open(File.desktopDirectory.resolvePath("b.swf"),FileMode.WRITE);
fileStream.writeBytes(ba);
fileStream.close();
fileStream = null;
}

问题:newswf.tags.push(tagSpr) 这个句子无法创建成功,can not create a sprite to a swf file successfully
劳资找遍百度、谷歌、雅虎都没找到成功new DefineSprite()的方法,尼玛!万分无奈之下求助于楼主。希望楼主大神指教下,楼主好人,感谢楼主!

Unknown fill style type: 0x5f

If a shape is made using texture for Stoke color, then SWF() throws error "Unknown fill style type: 0x5f". I provide you with the link to test fla file. You can repoduce error just by compiling it from IDE.
Thanks much for you efforts!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.