Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аплоадер фото, такой же как Вконтакте, с ресайзом(не могу закончить) 
:(
    Опции темы
wirwolf
  Дата 2.5.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2010

Репутация: нет
Всего: нет



Уважаемые форумчани, У меня недавно возникла проблема с загрузкой и ресайзом фото.
Сначала я сделал ресайз в пхп, но так как у меня на хостинге на 1 выполнение скрипта отведено 25 мб, мне пришлось отойти от этой идеи, так как после декомпрессии фото будет занимать длинна * ширина * 4 байта. Если фото размером 2100 на 3200 декомпрессить то получиться 26880000 байт, а это уже превышает допустимый размер, и это не придел.
Я решил делать аплоадер на сервер во флексе и чтобы там ресайз в клиенте.
Нашел хороший урок тут
взял декомпилил аплоадер который вконтакте, тем самым получив класс ресайза, но вот в чем вся проблема, я не могу из типа FileRefrens получить тип BitmapData. С кучей людей переговорил, и так и не смог сделать, вот мои исходники.
Код
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    width="540" height="465" 
    initialize="init()" viewSourceURL="srcview/index.html">
    
    

<mx:Script>
    <![CDATA[
        import mx.events.CollectionEvent;
        import flash.net.FileReferenceList;
        import mx.collections.ArrayCollection;
        import imgEdit;
        [Bindable]
        public var imgClass:imgEdit = new imgEdit();
        public var _imgClass:imgEdit;        


        public var photos:ArrayCollection = new ArrayCollection;    
        public var Array_photo:ArrayCollection = new ArrayCollection;
        private var frList:FileReferenceList = new FileReferenceList;
        
        private var _loader:Loader;
        private var _bitmap:Bitmap;
        private var _browseTxt:*;



        private function init():void
        {
    
            photos.addEventListener(CollectionEvent.COLLECTION_CHANGE,function():void
            { 
                startUploadButton.enabled = (photos.length>0);
                clearPhotosButton.enabled = (photos.length>0);
            });
            frList.addEventListener(Event.SELECT,addPhotos);
        }        

        private function selectPhotos():void
        {
            var fileFilter:FileFilter = new FileFilter("Изображения jpeg","*.jpg;*.jpeg");
            frList.browse([fileFilter]);
        }

        private function addPhotos(e:Event):void
        {
            for (var i:uint = 0; i < frList.fileList.length; i++)
            {
                var elem:Object = new Object;
                elem.fr = FileReference(frList.fileList[i]);
                elem.fr.load();
                elem.fr.addEventListener(Event.COMPLETE,refreshThumb);
                photos.addItem(elem);

            }
        }
        
        private function refreshThumb(e:Event):void
        {
            photosList.invalidateList();
        }

        private function clearPhotos():void
        {
            photos.removeAll();
        }
        
        public function clearPhoto(data:Object):void
        {
            photos.removeItemAt(photos.getItemIndex(data));
        }




        private function startUpload():void
        {
            for (var i:int = 0; i < photos.length; i++)
            {
                var file:FileReference = FileReference(photos.getItemAt(i).fr);
                main(file);
            }
            
            photosProgressContainer.visible = true;
            var request:URLRequest = new URLRequest();
            request.url = "upload.php";
            var fr:FileReference = photos.getItemAt(0).fr;
            fr.cancel();
            fr.addEventListener(ProgressEvent.PROGRESS,uploadProgress);
            fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadComplete);
            fr.upload(request);
        }



 public function main(data:FileReference):void {
    var   file:FileReference;
  file = FileReference(data);
 // stage.addEventListener(MouseEvent.CLICK, init);
           file.addEventListener(Event.SELECT, frSelectHandler);
           file.addEventListener(Event.COMPLETE, frCompleteHandler);
             trace('----');
 }

 private function frSelectHandler(e:Event):void {
  e.target.load();
 }
 //
 private function frCompleteHandler(e:Event):void {
  var ldr:Loader=new Loader();
  ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, pictureComplete);
  ldr.loadBytes(e.target.data);
 }
 //
 private function pictureComplete(e:Event):void {
  var ldr:Loader = Loader(e.target.loader);
  trace(ldr.width, 'x', ldr.height);
  addChild(ldr);
 }

        
        
        
        private function uploadProgress(e:ProgressEvent):void
        {
            photosProgress.setProgress(e.bytesLoaded,e.bytesTotal);
        }

        private function uploadComplete(e:DataEvent):void
        {
            photos.removeItemAt(0);
            if (photos.length > 0) 
                startUpload();
            else
                photosProgressContainer.visible = false;
        }
        
        private function cancelUpload():void
        {
            photos.getItemAt(0).fr.cancel();
            photosProgressContainer.visible = false;
        }
    ]]>
</mx:Script>

<mx:Panel 
    title="Загрузка фотографий" 
    paddingTop="10" paddingLeft="10" paddingBottom="10" paddingRight="10" 
    width="100%" height="100%">

    <mx:TileList
        id="photosList"
        dataProvider="{photos}"
        itemRenderer="photoThumb"
        alternatingItemColors="[#FFFFFF]" 
        verticalScrollPolicy="on"
        columnWidth="120" columnCount="4" rowHeight="110" rowCount="3" 
        itemClick="{photosList.selectedIndex=-1}" />

    <mx:HBox id="photosProgressContainer" horizontalAlign="center" width="100%" visible="false">
        <mx:ProgressBar id="photosProgress" mode="manual" label="" />
        <mx:Button label="Отмена" click="cancelUpload()"  enabled="false"/>
    </mx:HBox>
        
    <mx:ControlBar horizontalAlign="center">
        <mx:Button id="selectPhotosButton" label="Выбрать фотографии" click="selectPhotos()" />
        <mx:Button id="startUploadButton" label="Начать загрузку" click="startUpload()"  enabled="false"/>
        <mx:Button id="clearPhotosButton" label="Очистить" click="clearPhotos()"  visible="true" enabled="false"/>
    </mx:ControlBar>
</mx:Panel>
</mx:Application>

В чем у меня проблема тнад этим кодом сижу уже примерно месяц smile    smile  smile  , помогите пожалуйста.
PS.Надеюсь я ясно выразился, заранее большое спасибо за помощь! 

Это сообщение отредактировал(а) wirwolf - 2.5.2010, 14:15
PM MAIL   Вверх
ОВиталий
Дата 4.5.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



когда делаешь аплоад фотки попробуй создать Loader. на Loader повесть прослушиватель события ***.contentLoaderInfo.addEventListener - он сработает когда фотка загрузиться и нем поменять размеры.

пример:
Код

var img:Loader;
img = new Loader();
img.load(new URLRequest( *****));
img.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
var img:Loader = e.currentTarget.loader;
img.width = ***;
img.height = ***;
if (img.scaleX < img.scaleY){
  img.scaleY = img.scaleX;
  img.y = (****-img.height)/2;
}else{
   img.scaleX = img.scaleY;
   img.x = (***-img.width)/2;
}
});
***.addChild(img);


понятно?

Добавлено через 53 секунды
когда делаешь аплоад фотки попробуй создать Loader. на Loader повесть прослушиватель события ***.contentLoaderInfo.addEventListener - он сработает когда фотка загрузиться и нем поменять размеры.

пример:
Код

var img:Loader;
img = new Loader();
img.load(new URLRequest( *****));
img.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
var img:Loader = e.currentTarget.loader;
img.width = ***;
img.height = ***;
if (img.scaleX < img.scaleY){
  img.scaleY = img.scaleX;
  img.y = (****-img.height)/2;
}else{
   img.scaleX = img.scaleY;
   img.x = (***-img.width)/2;
}
});
***.addChild(img);


то есть ты меняшь не размеры картинки, а размер ее отображения.
понятно? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flex | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.