Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка изображения во Flash, изменить размер и сохранить на сервере (http://www.flasher.ru/forum/showthread.php?t=202431)

sadrbox 15.07.2013 18:08

Загрузка изображения во Flash, изменить размер и сохранить на сервере
 
Задача:
  • Выбрать файл на локальном компьютере
  • Изменить размер изображения
  • Отправить на сервер для сохранения
Обработка и сохранение на сервере PHP (с этим проблем нет).


Искал везде но не нашел конкретное решение этой задачи.
Я недавно начал изучать AS3 прошу строго не судить.

Код AS3:

package  {
 
        //import (все необходимые классы)
 
        public class Main extends MovieClip {
 
                private var URLRequest:URLRequest;
                private var file:FileReference;
 
                private var bmp:BitmapData;
                private var loader:Loader;
 
                public function Main():void
                {
                        loader = new Loader();
 
                        URLRequest = new URLRequest();
                        URLRequest.url = "upload.php";
                        URLRequest.method = URLRequestMethod.POST;
 
                        file = new FileReference();
                        file.addEventListener(Event.SELECT, select);       
 
                        browse_btn.addEventListener(MouseEvent.CLICK, browse);
                }
 
        // выбрать файл
                public function browse(e):void
                {
                        var filter:FileFilter = new FileFilter('Изображения: (*.jpg, *.jpeg, *.gif, *.png)','*.jpg;*.jpeg;*.gif;*.png');
                        file.browse([filter]);
                }
 
        // загрузить изображение во флэш
                public function select(e):void
                {
                        file.addEventListener(Event.COMPLETE, fileLoaded);
                        file.load();
                }                                       
 
                public function fileLoaded(e):void
                {
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgResize);
 
                        //какой вариант лучше использовать ?
                                loader.loadBytes(e.target.data);
                        // или
                                loader.loadBytes(file.data);
                }
        // изменить размер изображения
                public function imgResize(e):void
                {
 
                        // какой вариант использовать ?
                                loader.width = 300;
                                loader.scaleY = loader.scaleX;
                        // или
                                bmp:BitmapData = BitmapData(loader.traget.content as Bitmap);
                                bmp.width = 300;
                                bmp.scaleY = bmp.scaleX;
 
                                upload();
                }
        // отправка изображения на сервер
                public function upload():void
                {
                        file.upload(); // не срабатывает так как до этого было вызвано load();                                               
                }               
        }
 
}

Как решение: отправка и изменение размера изображения на сервере средствами PHP - не предлагать.
Буду очень благодарен за конкретные примеры с кодом.

chamele0n 16.07.2013 02:22

Код AS3:

                public function upload():void
                {
                        file.upload(); // не срабатывает так как до этого было вызвано load();                                               
                }

ну во первых функция не сработает изза безопастности, нужно участие пользователя
вовторых тема уже обсуждалась
http://www.flasher.ru/forum/showthread.php?t=201974

sadrbox 16.07.2013 13:30

Сделал так:
Были проблемы с классом JPEGEncoder. Нашёл рабочий JPEGEncoder http://www.bytearray.org/?p=775
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.net.URLRequest;
        import flash.net.URLLoader;
        import flash.net.FileReference;
        import flash.display.Loader;
        import flash.display.BitmapData;
        import flash.display.Bitmap;
        import flash.events.Event;
        import flash.net.FileFilter;
        import flash.events.MouseEvent;
        import flash.net.URLRequestMethod;
 
 
        public class Main extends MovieClip {
 
                private var filter:FileFilter = new FileFilter('Изображения: (*.jpg, *.jpeg, *.gif, *.png)','*.jpg;*.jpeg;*.gif;*.png');
 
                private var url:URLRequest = new URLRequest();
                private var urlLoader:URLLoader = new URLLoader();
                private var file:FileReference = new FileReference();;
                private var loader:Loader = new Loader();;
 
                public function Main() {
 
                        browse_btn.addEventListener(MouseEvent.CLICK, browse);
                }
 
                public function browse(e)
                {
 
                        file.addEventListener(Event.SELECT, select);                       
                        //file.addEventListener(IOErrorEvent.IO_ERROR, error);
                        //file.addEventListener(ProgressEvent.PROGRESS, progress);
                        //file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, response);
 
                        file.browse([filter]);
                }
                // загрузить изображение во флэш
                public function select(e:Event):void
                {
                        file.addEventListener(Event.COMPLETE, getLoader);
                        try
                        {
                                file.load();
                        }
                        catch (e:Error)
                        {
                        }
                }
                //
                public function getLoader(e:Event):void
                {
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, upload);
                        loader.loadBytes(file.data);
                }
                //
                public function upload(e):void
                {
                        var bmpData:BitmapData = imgResize(loader.content as Bitmap);
                        var fileName:String = String(new Date().getTime());
                        var jpg:JPEGEncoder = new JPEGEncoder();
                        url.data = jpg.encode(bmpData);
                        url.url = "http://мой_сайт/upload.php?name="+fileName+"&d="+new Date().getTime();               
                        url.method = URLRequestMethod.POST;
                        url.contentType = 'application/octet-stream';
                        urlLoader.load(url);
                }
                //
                public function imgResize(bit:Bitmap):BitmapData
                {
                var w:Number = 800;
    var h:Number = 600;
    //var sourceBitmapData:BitmapData = new MyBitmapData();
 
    var sx:Number = w / bit.width;
    var sy:Number = h / bit.height;
    var bitmap:Bitmap = new Bitmap( new BitmapData( w, h ) );
        bitmap.bitmapData.draw( bit.bitmapData, new Matrix( sx, 0, 0, sy, 0, 0 ) );
 
        return bitmap.bitmapData;
 
                }
 
        }
}



Часовой пояс GMT +4, время: 00:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.