【问题标题】:AS3 save image through PHPAS3 通过 PHP 保存图像
【发布时间】:2014-01-09 07:51:04
【问题描述】:

我需要将 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 代码。在此过程中也没有保存图像。任何帮助将不胜感激!

【问题讨论】:

    标签: php image actionscript-3 save local


    【解决方案1】:

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

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

    按照以下步骤操作,看看是否有帮助:

    1. 使用method1method2将Image ByteArray转换为Base64图像

    2. Create an anchor tag as shown below

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

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

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

    免责声明:

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

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

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

    【讨论】:

    • 谢谢!让我试试这个。
    • 嗨 srvikram13,如果屏幕截图是在 flash 中拍摄并使用 jpgencoder 编码的,我将如何将其上传到网络服务器?
    • 很久以前我做了一个类似的应用程序。我现在没有那个代码。但是,您可以尝试使用this 教程中给出的 PHP 代码将图像保存在您的网络服务器上。
    • @user3176502 在将数据发送到服务器时首先对其进行 base16 编码以删除所有非 ascii 字符。在服务器端,您必须对其进行 base16 解码,然后将其写入具有 jpg 扩展名的文件。
    • 我实际上通过简单地安装 WAMP 并在 localhost 上使用 php 保存来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2012-12-20
    • 2018-04-27
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2012-08-16
    相关资源
    最近更新 更多