Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.04.2011, 17:08
Kozalo вне форума Посмотреть профиль Отправить личное сообщение для Kozalo Найти все сообщения от Kozalo
  № 1  
Ответить с цитированием
Kozalo

Регистрация: Apr 2011
Сообщений: 1
Question Сохранение картинки. В Денвере работает, а на сервере - нет.

Здравствуйте! Мне нужно сохранить на сервере картинку, нарисованную в приложении. С помощью Интернета получился следующий код:
ActionScript 3.0 (Flash CS5 Portable):
Код AS3:
var pixels:Array = new Array;
var image:BitmapData = new BitmapData(w,h);  // width и height указываются выше и равны 587 и 455 соответственно.
 
for (var i:uint=0; i<places.length; i++)
{
	// В массиве places хранятся нарисованные фигуры (спрайты с кругами, линиями, прямоугольниками.
	image.draw(places[i]);
	removeChild(places[i]);
}
 
for (var a:int = 0; a <= w; a++)
{
	for (var b:int = 0; b <= h; b++)
	{
		// Записываем значение цвета пикселя в 16-ричной форме
		var tmp = image.getPixel(a,b).toString(16);
		pixels.push(tmp);
	}
}
 
var request:URLRequest = new URLRequest;
request.url = serverURL;
request.method = URLRequestMethod.POST;
request.data = new URLVariables("password=" + serverPassword + "&do=createPerson&uid=" + uid + "&name=" + Edit1.text + "&force=" + String(UpDown1.value) + "&protection=" + String(UpDown2.value) + "&intelligence=" + String(UpDown3.value) + "&weapons=" + weaponsString + "&image=" + pixels.toString());
var loader:URLLoader = new URLLoader;
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, createdComplete);
loader.load(request);
PHP:
PHP код:
$data explode(","$_POST['image']);
$image imagecreatetruecolor(587455);
$i 0;
for(
$x=0$x<=587$x++)
{
    for(
$y=0$y<=455$y++)
    {
        
$int hexdec($data[$i++]);
        
$color ImageColorAllocate ($image0xCC & ($int >> 0x10), 0xCC & ($int >> 0x8), 0xCC $int);
        
imagesetpixel($image$x$y$color);
    }
}
$rr imagePNG($image$pathImage);
imagedestroy($image);
print 
"result=OK"
Проверял в Денвере, всё работало. Перенёс на хостинг (hostinger.ru) - сохраняется чёрный прямоугольник. Иногда всё-таки сохраняет нормально, но это происходит временно и случайно. Не знаю, что и делать.
Вообще, этот способ не очень хороший. Уходит слишком много трафика. Может есть какие-нибудь другие способы?
Должно получиться что-то вроде этого. А получается это.

Старый 29.04.2011, 15:09
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Другой способ есть, и он вполне логичен: изображение кодируется флэшом в png или jpg, и отправляется на сервер как файл. Для кодирования используются классы PNGEncoder и JPGEncoder, которые входят в состав as3corelib.

Отправка осуществляется при помощи собранного вручную POST-запроса. Сервер, соответственно, должен обработать его как закачку файла.
Код AS3:
private function sendPNG(bmpData: BitmapData):void {	//http://www.actionscript.org/forums/showpost.php3?p=636159&postcount=4
 
	var imageBytes:ByteArray = PNGEncoder.encode(bmpData);
	imageBytes.position = 0;
 
	var boundary: String = '---------------------------7d76d1b56035e';
	var header1: String  = '--'+boundary + '\r\n'
							+'Content-Disposition: form-data; name="Filename"\r\n\r\n'
							+'picture.png\r\n'
							+'--'+boundary + '\r\n'
							+'Content-Disposition: form-data; name="Filedata"; filename="picture.png"\r\n'
							+'Content-Type: application/octet-stream\r\n\r\n'
	//In a normal POST header, you'd find the image data here
	var header2: String =	'--'+boundary + '\r\n'
							+'Content-Disposition: form-data; name="Upload"\r\n\r\n'
							+'Submit Query\r\n'
							+'--'+boundary + '--';
 
	//Encoding the two string parts of the header
	var headerBytes1: ByteArray = new ByteArray();
	headerBytes1.writeMultiByte(header1, "ascii");
 
	var headerBytes2: ByteArray = new ByteArray();
	headerBytes2.writeMultiByte(header2, "ascii");
 
	//Creating one final ByteArray
	var sendBytes: ByteArray = new ByteArray();
	sendBytes.writeBytes(headerBytes1, 0, headerBytes1.length);
	sendBytes.writeBytes(imageBytes, 0, imageBytes.length);
	sendBytes.writeBytes(headerBytes2, 0, headerBytes2.length);
 
	var request: URLRequest = new URLRequest(Config.UPLOAD_URL);
	request.data = sendBytes;
	request.method = URLRequestMethod.POST;
	request.contentType = "multipart/form-data; boundary=" + boundary;
 
	var loader:URLLoader = new URLLoader();
 
	loader.addEventListener(Event.COMPLETE, this.completeHandler);
	loader.addEventListener(IOErrorEvent.IO_ERROR, this.errorHandler);
	loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.errorHandler);
 
	loader.load(request);
 
}//sendPNG
__________________
тонкий тролль, осеянный благодатью

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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