PDA

Просмотр полной версии : загрузчик картинок


syegorius
19.08.2011, 20:22
доброе время суток... есть такая проблема - сервер крайне перегружен и объем дискового пространства ограничен, поэтому для того что бы обработка загружаемых пользователем фотографий дополнительно не нагружала сервер решил поискать в интернете исходники какого-нибудь флеш-приложения, которое будет еще на стороне пользователя обрабатывать фотографии, уменьшать их размер до, например, 100КБ и потом уже отправлять на сервер. в общем поиски закончились крахом... либо не работает во флеш 9, либо стоит денег и тоже не известно будет ли оно работать в 9 флеше, либо вообще просто тупо отправляет те же фотки такого-же размера...

если кто сталкивался с такой проблемой и знает, где можно скачать исходники такого приложения, то будьте добры подскажите где.

заранее спасибо!

Genzo
19.08.2011, 20:50
FileReference + BitmapData + JPEGEncoder

NikolyA
19.08.2011, 20:57
пишим клиента, пишем сервер, и вуаля, рабочее приложение

goodguy
19.08.2011, 21:50
либо не работает во флеш 9
О каком флеш 9 речь? Adobe Flash CS3 чтоли?

Genzo
19.08.2011, 22:12
О каком флеш 9 речь? Adobe Flash CS3 чтоли?
скорее всего о 9ой версии плеера , а не ide
Есть люди которые еще 8ой используют http://mycounter.com.ua/statistic.php?show=flash&date=today

syegorius
19.08.2011, 22:49
пишим клиента, пишем сервер, и вуаля, рабочее приложение

ну если бы я был асом во actionscript, то я б написал но на данный момент моих знаний хватает только переделывать под себя готовые исходники

Добавлено через 37 секунд
О каком флеш 9 речь? Adobe Flash CS3 чтоли?

я имел ввиду flash player 9

nOobCrafter
19.08.2011, 23:31
поищите норм примеры, их хватает, фп должен понимать векторы (по хорошему) и работу с байтмассивом.

syegorius
20.08.2011, 00:09
и еще у меня сейчас возник такой вопрос (он не по теме, но да бы не флудить в других топиках спрошу тут)

все свои swf-файлы я вставляю с помощью swfobject. Скажите можно ли каким-то образом сделать так, что б если у клиента установлен flash player 8 или 9, то ему вместо файла выводилось сообщение, что ему необходимо обновить флеш-плеер или вообще автоматически, тайком от самого пользователя обновило его флеш-плеер?

NikolyA
20.08.2011, 02:04
1. по задаче: тут тебе надо либо самому постараться сделать, либо заказать в вакансиях аппликуху
2. так SWFOject есть пример по flash player detected

syegorius
20.08.2011, 03:02
были бы у меня лишние деньги, вы думаете ломал бы я себе голову как сделать то или се.
поэтому приходится все делать самому...

я вот щас наткнулся на статью http://habrahabr.ru/blogs/adobe/80954/, сделать получилось, но картинки не обрабатывает, а отправляет их такими как есть.
в конце статьи есть ссылка http://flexgraphix.com/blog/?p=51
типа как обрабатывать картинки дальше, но я не могу понять куда и как в flash buildere нужно вставлять тот код...

никто не намекнет как?

NikolyA
20.08.2011, 05:59
http://www.flexgraphix.com/Lab/BitmapLoader/Archive.zip ссылка на архив ниже есть, открывай и используй

processo
14.09.2011, 18:29
syegorius, сам 2 дня искал как это сделать, и вот собрал по кусочкам
private function _onDataLoaded(e:Event){
var tempFileRef:FileReference = FileReference(e.target) ;
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onImageLoaded) ;
_loader.loadBytes (tempFileRef.data) ;
trace ("onDataLoaded");
pgUpload.visible = false;
}

private function _onImageLoaded(e:Event){
_bitmap = Bitmap(e.target.content);
_bitmap.smoothing = true;

var jpgEncoder:JPGEncoder = new JPGEncoder(85);
var jpgStream:ByteArray = jpgEncoder.encode(_resizeBitmap(_bitmap.bitmapData));
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("uploads.php?name=image.jpg&dir=1");//(path+"upload.php?name=image.jpg&dir="+grId);

jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
navigateToURL(jpgURLRequest, "_self");
}

private function _resizeBitmap(bitmapData:BitmapData):BitmapData{

if (bitmapData.width <= _MAX_WIDTH && bitmapData.height <= _MAX_HEIGHT){
return bitmapData.clone();
}

var myMatrix:Matrix = new Matrix();
var coefW:Number = _MAX_WIDTH / bitmapData.width;
var coefH:Number = _MAX_HEIGHT / bitmapData.height;
var multiplier:Number;
if (coefW > coefH){
multiplier = coefH;
} else {
multiplier = coefW;
}

myMatrix.createBox(multiplier, multiplier, 0, 0, 0);

var newBitmapData:BitmapData = new BitmapData(multiplier * bitmapData.width, multiplier * bitmapData.height, true, 0xFFFFFF);

newBitmapData.draw(bitmapData, myMatrix , null, null, null, true);

return newBitmapData;
}
_onDataLoaded отправляется после выбора изображения
private function selectPhotos(e:MouseEvent){
fileUp = new FileReference;
fileUp.addEventListener(Event.SELECT, selectHandler);

fileUp.addEventListener(Event.CANCEL, cancelHandler);

fileUp.browse([imagesFilter]);

}

public function selectHandler(event:Event){
fileUp.load();
fileUp.addEventListener(Event.COMPLETE, _onDataLoaded) ;

Теперь ищу как средствами php сохранить всё это на сервере))