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) не будут сохранять файлы на диске!

Другие вопросы по тегам