Здравствуйте! Мне нужно сохранить на сервере картинку, нарисованную в приложении. С помощью Интернета получился следующий код:
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(587, 455);
$i = 0;
for($x=0; $x<=587; $x++)
{
for($y=0; $y<=455; $y++)
{
$int = hexdec($data[$i++]);
$color = ImageColorAllocate ($image, 0xCC & ($int >> 0x10), 0xCC & ($int >> 0x8), 0xCC & $int);
imagesetpixel($image, $x, $y, $color);
}
}
$rr = imagePNG($image, $pathImage);
imagedestroy($image);
print "result=OK";
Проверял в Денвере, всё работало. Перенёс на хостинг (hostinger.ru) - сохраняется чёрный прямоугольник. Иногда всё-таки сохраняет нормально, но это происходит временно и случайно. Не знаю, что и делать.
Вообще, этот способ не очень хороший. Уходит слишком много трафика. Может есть какие-нибудь другие способы?
Должно получиться что-то вроде
этого. А получается
это.