Actionscript 3 - as3阶段JPG字节数组到服务器端PHP的问题


actionscript 3 - as3 stage to jpg byte-array to server side php problems

我希望得到一个测试工作。嵌入一个SWF,该SWF将舞台的jpeg发送到PHP脚本,PHP脚本将保存到服务器。我在这里的深水,不能让以下工作…

//---------------------------- AS3

import com.adobe.images.JPGEncoder;
import flash.events.MouseEvent;
import flash.display.Sprite;
var dot:Sprite = new Sprite()
dot.graphics.beginFill(1)
dot.graphics.drawCircle(550/2,400/2,40)
addChild(dot)
stage.addEventListener(MouseEvent.MOUSE_DOWN, saveJPG)
function saveJPG():void{

    var jpgSource:BitmapData = new BitmapData (stage.stageWidth, stage.stageHeight);
    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"];
    imagejpeg( $jpg , "yes.jpg", 100  );
}
?>

我喜欢使用AMFPHP来处理这样的情况。在这里查看Josh Strikes主页的远程部分。只需将ByteArray嵌套到另一个数组中,该数组包含您需要识别它的任何其他数据,或者只是单独发送它。这样,您既可以解码它并将其保存到文件夹中,也可以将ByteArray填充到数据库中以供以后使用。如上所述,您必须确保首先对ByteArray进行编码。

您可能需要在发布之前将byteArray编码为Base64,然后在服务器端使用PHP进行解码。但是你并没有说到底是什么出了问题……

您错过了从BitMapData到BitMap到image的图像转换

function createJPG():void{
  var finished1:BitmapData = new BitmapData ( stage.stageWidth, stage.stageHeight, true, 0xffffffff );
  finished1.draw( stage );
  // the key part you are missing
  var myImage:Image = new Image();
  myImage.load( new Bitmap(finished1) );
  myImage.content.width = stage.stageWidth;
  myImage.content.height = stage.stageHeight;
  var finished:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xffffffff );
  finished.draw(myImage); 
  myImage = null;

  // encode the finished image so we can send the data to the server
  var encoder:JPEGEncoder = new JPEGEncoder();
  var data:ByteArray = encoder.encode(finished);
  var b64:Base64Encoder = new Base64Encoder()
  b64.encodeBytes( data )
return b64.toString();
}

看看这个链接,它会解释你需要的一切