AS3 этап снимок экрана на жесткий диск сохранить
Я работаю над перетаскиванием Flash-игры, после того, как вы разместите все подвижные части, я хочу иметь кнопку, которая позволит человеку сохранить снимок экрана всей сцены.
Я искал разные образцы и не могу заставить этот код работать.
Вот AS3
snap_btn.addEventListener(MouseEvent.CLICK, snapShot );
function snapShot( evt:MouseEvent ):void
{
import com.adobe.images.JPGEncoder;
var jpgSource:BitmapData = new BitmapData (stage.width, stage.height);
jpgSource.draw(stage);
var jpgEncoder:JPGEncoder = new JPGEncoder(85);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("jpg_encoder_download.php?name=sketch.jpg");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
navigateToURL(jpgURLRequest, "_blank");
}
PHP
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
// get bytearray
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
// add headers for download dialog-box
header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename=".$_GET['name']);
echo $jpg;
}
?>
Я закончил тем, что заставил это работать, я избавился от php
snap_btn.addEventListener(MouseEvent.CLICK, snapShot );
function snapShot( evt:MouseEvent ):void
{
import com.adobe.images.JPGEncoder;
var jpgSource:BitmapData = new BitmapData(stage.width, stage.height);
jpgSource.draw(stage);
var jpgEncoder:JPGEncoder = new JPGEncoder(80);
var imgByteData:ByteArray = jpgEncoder.encode(jpgSource);
file = new FileReference();
file.save(imgByteData, "Haven_Big_Dream_Map.jpg");
}
1 ответ
Я просто перепишу ответ Эвана.
Используйте FileReference для сохранения файла после использования JPEGEncode или PNGEncode из adobe.corelib в BitmapData. Помните, что старые версии FlashPlayer (<10) не будут сохранять файлы на диске!