Actionscript 3加载>结合>并保存外部图像

时间:2012-03-11 00:52:57

标签: actionscript bitmap save encoder

我是动作脚本3的新手,所以,请提前感谢您提供任何帮助。基本上我要做的是加载2个或更多外部图像,大小和分辨率相同,然后将它们组合或复合在一起,然后使用jpeg或png编码器将结果保存为新图像。

我不想拍摄舞台的快照,我想用原始分辨率保存图像。到目前为止,我唯一能做的就是加载两个图像,并将它们合成到舞台上。这就是它。

有人可以提供一些有关如何实现这一目标的见解。我正在使用flash pro CS5.5,并在类文件中编写代码,而不是在时间轴上。这是代码的副本。

package 

{

import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.*;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.ByteArray;


public class imageComposite extends MovieClip
{

    var images:Array = ["koala.png","koala2.png"];//two images

    public function imageComposite()
    {
        // constructor code
        var thumbLoader:Loader;

        for (var i:uint = 0; i < images.length; i++)
        {

            thumbLoader = new Loader;
            thumbLoader.load(new URLRequest(("assets/" + images[i])));
            addChild(thumbLoader);
        }
        thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,bmpData);
    }


    public function bmpData(evt:Event):void
    {

        trace("Event was completed successfully!");
    }


}

}

2 个答案:

答案 0 :(得分:0)

首先,将Loader个对象放入一个单独的“持有者”对象中。

// constructor code
var holder:Sprite = new Sprite();
addChild(holder);

var thumbLoader:Loader;

for (var i:uint = 0; i < images.length; i++)
{

    thumbLoader = new Loader;
    thumbLoader.load(new URLRequest(("assets/" + images[i])));
    holder.addChild(thumbLoader);
}
...

稍后在您的"complete"事件处理程序中:

var bitmapData:BitmapData = new BitmapData(holder.width, holder.height, false);
bitmapData.draw(holder);

var byteArray:ByteArray = PNGEncoder.encode(bitmapData);

然后,您可以将此byteArray对象写入服务器或磁盘(桌面AIR应用程序)。

答案 1 :(得分:0)

非常感谢你花时间提供你的知识,这更有帮助。你给我的代码完美地处理了一个例外。必须在函数之外声明“holder”变量。我得到了一点访问错误,但是当我把它放在函数之外时它运行得很好。

无论如何,我已经扩展了添加保存功能的代码。我只是在舞台上放了一个movieClip,实例名称为“saveButt_mc”。然后添加了使用fileReference进行保存的功能。我的目标是让它使用php自动保存到服务器,但是现在必须这样做。

继续我最后的代码,再次感谢你的帮助。

-D

package 

{

import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.*;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.display.Sprite;
import flash.net.FileReference;
import flash.net.FileFilter;

import com.adobe.images.PNGEncoder;


public class imageComposite extends MovieClip
{

    var images:Array = ["koala.png","koala2.png"];//two images
    var holder:Sprite = new Sprite();

    public function imageComposite()
    {
        // constructor code
        addChild(holder);
        var thumbLoader:Loader;

        for (var i:uint = 0; i < images.length; i++)
        {

            thumbLoader = new Loader  ;
            thumbLoader.load(new URLRequest(("assets/" + images[i])));
            holder.addChild(thumbLoader);

        }
        //thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, bmpData);

        saveButt_mc.addEventListener(MouseEvent.CLICK, bmpData);
        addChild(saveButt_mc);
        saveButt_mc.buttonMode = true;
    }
    //need contentLoaderInfo to access loader data;

    public function bmpData(evt:Event):void
    {
        var bitmapData:BitmapData = new BitmapData(holder.width,holder.height,false);
        bitmapData.draw(holder);
        var byteArray:ByteArray = PNGEncoder.encode(bitmapData);

        var file:FileReference = new FileReference();
        file.save(byteArray, "newImage.jpg");

        trace("Event was completed successfully!");
    }

}

}