2009-09-03 2 views

ответ

1

Вы можете попробовать это:

var bitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,0x000000); 
bitmapData.draw(workspace); 
var byteArray:ByteArray = bitmapData; 

var request:URLRequest = new URLRequest ('yourserver/save.php'); 
var loader: URLLoader = new URLLoader(); 
request.contentType = 'application/octet-stream'; 
request.method = URLRequestMethod.POST; 
request.data = byteArray; 
loader.load(request); 

//and save.php 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>save</title> 
</head> 

<body> 
<?php 

$fp = fopen('file.txt', 'wb'); 
fwrite($fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] ); 
fclose($fp); 

echo "result: " + $fp; 
?> 
</body> 
</html> 

Кроме того, вы можете использовать Adobe's corelib, который имеет кодер JPEG, и есть грузы great tutorials там.

+0

В учебнике вы связали, что мне очень помогли. Большое спасибо! – picardo

2

Вы можете нарисовать любой объект DisplayObject в объекте BitmapData, используя метод draw. Однако вы не можете нарисовать сцену или класс корневого приложения (ошибка безопасности), поэтому вы должны содержать ваше приложение внутри мастер-спрайта, который затем добавляется на этот этап.

public function createSnapShot(displayObject:DisplayObject):BitmapData 
{ 
    var nWidth:Number = displayObject.width; 
    var nHeight:Number = displayObject.height; 
    var bmd:BitmapData = new BitmapData(nWidth, nHeight, true, 0x00000000); 
    bmd.draw(displayObject); 
    return bmd; 
} 

После того, как ваш BitmapData вам нужно сериализовать его к ByteArray, поэтому он может быть отправлен с помощью URLLoader. Для Serialize вам нужен JpegEncoder, который включен в Flex SDK, или вы можете использовать кодировщик, снабженный основными библиотеками Adobe.

A3CoreLibs on Google Code

В этом примере AMFPHP используется туда и обратно спасительной BitmapData на сервер и обратно agaib, он должен служить хорошим спрыгнуть точкой для вас, но вы также можете посмотреть в отправить форму из нескольких частей данные.

Sephiroth AMFPHP Tutorial

+0

Должен ли я отправить ByteArray на сервер, чтобы сохранить его в виде файла? Как насчет использования FileReference.save()? – picardo

+0

Ничего. Я просто понял, что FileReference.save() работает только во Flash 10. – picardo

2

В дополнение к другим ответам, обратите внимание, что Flash Player 10 можно сразу сохранить файл на HD пользователя, без необходимости отправки его на сервер ... см FileReference.save()