Actionscript 3 Загрузить> Объединить> и Сохранить внешние изображения - PullRequest
0 голосов
/ 11 марта 2012

Я новичок в ActionScript 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 голосов
/ 11 марта 2012

Большое спасибо за то, что нашли время предложить свои знания, это было более чем полезно. Код, который вы мне дали, отлично работал с одним исключением. переменная "holder" должна быть объявлена ​​вне функции. Я получил немного ошибки доступа, но когда я поместил ее вне функции, она работала просто отлично.

Во всяком случае, я расширил код, добавив возможность сохранения. Я просто поместил мувиклип на сцену с именем экземпляра «saveButt_mc». Затем добавлена ​​возможность сохранения с помощью fileReference. Моя цель - сделать так, чтобы он автоматически сохранялся на сервере с помощью php, но сейчас это нужно сделать.

Вот мой окончательный код, еще раз спасибо за помощь.

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!");
    }

}

}

0 голосов
/ 11 марта 2012

Сначала вы помещаете оба объекта 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).

...