Есть ли способ для flash AS3 сделать снимок кадра, а затем сохранить его в формате JPEG - PullRequest
1 голос
/ 23 февраля 2012

есть ли у flash AS3 возможность сделать снимок кадра, а затем сохранить его в формате jpeg без использования классов

1 Ответ

10 голосов
/ 23 февраля 2012

Конечно ... попробуйте поискать в Google ... Есть множество способов. Это при условии, что вы в порядке со стандартными классами флэш. Если вы буквально имеете в виду отсутствие уроков, тогда удачи вам.

Вот один из способов сделать это. флэш-PHP-загрузка

В основном, ключевые моменты заключаются в том, что вы создаете кодировщик JPEG, который будет кодировать ваше изображение в формате JPEG (вы можете сделать PNG, если хотите, также), например:

var jpgEncoder:JPGEncoder;
jpgEncoder = new JPGEncoder(90);

Затем вы кодируете сцену, сначала рисуя ее данные в растровое изображение, а затем кодируя это:

var bitmapData:BitmapData = new BitmapData(stage.width, stage.height);
bitmapData.draw(stage, new Matrix());

img = jpgEncoder.encode(bitmapData);

Теперь, в зависимости от того, какую вспышку вы используете, вы можете сделать следующее, чтобы предложить пользователю сохранить:

var file:FileReference = new FileReference();
file.save(img, "filename.jpg");

Или, если вы хотите сохранить его на сервере, вы можете сделать следующее:

var sendHeader:URLRequestHeader = new URLRequestHeader("Content-type","application/octet-stream");
var sendReq:URLRequest = new URLRequest("path-to-php.php");

sendReq.requestHeaders.push(sendHeader);
sendReq.method = URLRequestMethod.POST;
sendReq.data = img;

var sendLoader:URLLoader;
sendLoader = new URLLoader();
sendLoader.addEventListener(Event.COMPLETE, imageSentHandler);
sendLoader.load(sendReq);

И тогда вам нужен файл PHP со следующим:

<?php
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
$filename = "filename.jpg";
$fp = fopen( $filename,"wb");
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );
echo "filename=".$filename."&base=".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]);
}
?>

Обратите внимание, что я не проверял этот код на наличие ошибок, но общая идея верна, и вы должны иметь возможность использовать его и вносить изменения, необходимые для вашей программы.

...