AS3通过PHP保存图像

时间:2014-01-09 07:51:04

标签: php image actionscript-3 save local

我需要将Flash中的屏幕截图保存到我的本地驱动器上。由于一些限制,我很遗憾无法使用FileReference,因为它生成一个对话框(任何直接保存本地的方式?)或FileStream(AdobeAir),因为我仅限于SWF。

所以我决定尝试使用PHP来完成工作。

AS3

private function takePhoto():void {
  var bitmapData:BitmapData = new BitmapData(800, 650);
  var encoder:JPGEncoder = new JPGEncoder(100);
  var byteArray:ByteArray;
  var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");

  bitmapData.draw(camHolder);
  byteArray = encoder.encode(bitmapData);
  var myRequest:URLRequest = new URLRequest("save.php");
  myRequest.requestHeaders.push(header);
  myRequest.method = URLRequestMethod.POST;
  myRequest.data = byteArray;
  loader.addEventListener(Event.COMPLETE, imgSaved);
  loader.load(myRequest);
}

private function imgSaved(event:Event):void {
  trace(loader.data);
}

PHP

<?php
if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){
  $jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
  $filename = "test.jpg";
  file_put_contents($filename, $jpg);
}
?>

关于来自我的AS3 imgSaved函数的跟踪的奇怪之处在于它确切地逐字回报我的PHP代码。在此过程中也没有保存图像。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

实现这一目标有一个棘手的方法。

您需要在SWF中提供下载链接(href HTML链接),以便用户点击并开始下载图片。

按照以下步骤查看是否有帮助:

  1. 使用method1method2

  2. 将Image ByteArray转换为Base64图像
  3. Create an anchor tag as shown below

    <a href="data:application/octet-stream;base64,xxxxx" download="filename.jpg">Download</a>

    其中'xxxxx'是图像的Base64编码字符串。

  4. 现在,当用户点击此链接时,图像应立即下载到指定为“下载”文件夹的用户中。

  5. <强>声明:

    1. 此解决方案的灵感来自另一个解决方案here

    2. 据我所知,这可能仅适用于您在浏览器中打开应用程序而不是作为独立应用程序或AIR应用程序打开时。

    3. 我自己没有尝试过,所以无法保证解决方案有效。