Уважаемые форумчани, У меня недавно возникла проблема с загрузкой и ресайзом фото. Сначала я сделал ресайз в пхп, но так как у меня на хостинге на 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> |
В чем у меня проблема тнад этим кодом сижу уже примерно месяц  , помогите пожалуйста. PS.Надеюсь я ясно выразился, заранее большое спасибо за помощь! Это сообщение отредактировал(а) wirwolf - 2.5.2010, 14:15
|