![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Доброго время суток.
Нужно повысить качество сжатия изображения при выгрузке. Суть в том что если пользователь выгружает большое изображения к примеру 1024х840, размер окна для обрезки изображения всеголишь в 420х420. Картинка в итоге очень плохо отображается. На выходе мы должны получить три размера, 250х250, 114х114 и 65х65. Делаю это так private function createBitmap(e:MouseEvent=null):void { if (!BitmapMatrix.init) { BitmapMatrix.init = true; BitmapMatrix.size = new Array(250,114,65); // Нужные размеры BitmapMatrix.status = new Array(); // Статус готовности BitmapMatrix.Bitmapdata = new Object(); // Объект для храрения битмапдаты BitmapMatrix.Bitmap = new Object(); // Объект для храрения битмапов } img_preview.mask = null; // Удаляем маску for (var index in BitmapMatrix.size) // перебираем нужные размеры { // Определяем коефициент на который подгонит изображение пож нужный размер var factor = BitmapMatrix.size[index]/Math.min(img_preview.img.height,img_preview.img.width); // Подгонка изображения img_preview.img.height *= factor; img_preview.img.width *= factor; BitmapMatrix.status[BitmapMatrix.size[index]] = true; // Устанавливаем статус готовности // Создаём битмапдату BitmapMatrix.Bitmapdata[BitmapMatrix.size[index]] = new BitmapData(BitmapMatrix.size[index], BitmapMatrix.size[index]); // Создаём битмап BitmapMatrix.Bitmap[BitmapMatrix.size[index]] = new Bitmap(BitmapMatrix.Bitmapdata[BitmapMatrix.size[index]]); // Снимаем снимок BitmapMatrix.Bitmapdata[BitmapMatrix.size[index]].draw(img_preview); } //viewborder.visible = true; img_preview.mask = masked; // Устанвлавием макску addChild(BitmapMatrix.Bitmap[250]); // Делаем тестовый спрайт //stabilizationCSS(); } private function uploadBitmap($size):void { try { cache.temp = cache.send.response; } catch (e:Error) {}; var header:URLRequestHeader = new URLRequestHeader("Content-type","application/octet-stream"); var loader = new URLLoader("http://server.com/upload.php?name="+cache.name); var jpg:JPGEncoder = new JPGEncoder(80); var ba:ByteArray = jpg.encode(BitmapMatrix.Bitmapdata[$size]); var myRequest:URLRequest = new URLRequest(s); myRequest.requestHeaders.push(header); myRequest.method = URLRequestMethod.POST; myRequest.data = ba; loader.load(myRequest); loader.addEventListener(Event.COMPLETE,uploadBitmapControl); }
__________________
return this... |
|
|||||
|
По хорошему слать бы на сервер только картинку и размеры региона которые юзер указал, и потом качественно обрабатывать. Вот вам на затравку http://habrahabr.ru/post/99108/
__________________
:) |
|
|||||
|
Спасибо сделал несколько по другому. Точнее сам допустил ошибку, делал скрин с окна которое и отображало только 420х420 пикселя, а подгружаемое изображение ресайзилось в нём. Выходом было следующие.
Помещаем изображение в спрайт. Подганяем под размер отображаемого окна. А процесс обрезки происходит так, сначало получаем координаты напрявляющих для обрезания изображения. Координаты переводим в координаты и масштаб ресайзнутого изображения. Делаем большой скрин. Почему большой потому что изображение может не иметь размера 250х250 (это минимум). Получаем новую битмапу. Новую битмапу подганяем под размер желаемые размеры и соответсвенно на каждой итерации снимаем нужного размера битмапы. Качество при этом ухудшилось на 2-3% + не задействовали сервер. + Есть козыр, фтошоповский эффект наложения антиблюр написанный на AS3. Кому интересно пиши в лс. Поделюсь опытом.
__________________
return this... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
В следующий раз, пожалуйста, называйте темы в соответствии с правилами форума. То есть по-русски.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|