嗨我希望测试工作。嵌入swf,将舞台的jpeg发送到保存到我的服务器的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 );
}
?>
答案 0 :(得分:1)
我喜欢使用AMFPHP来处理这样的情况。查看Josh Strikes主页here的远程部分。只需将ByteArray嵌套到另一个数组中,该数组包含您需要识别它的任何其他数据,或者只是自己发送它。通过这种方式,您可以对其进行解码并将其保存到文件夹中,或者只是将ByteArray填充到数据库中以供以后使用。如上所述,您必须首先确保对ByteArray进行编码。
答案 1 :(得分:0)
您可能需要在POST之前将byteArray编码为Base64,然后使用PHP在服务器端对其进行解码。但是你并没有真正说出究竟什么不起作用......
答案 2 :(得分:0)
您缺少从BitMapData到BitMap到图像的图像转换
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();
}
看看这个link它会解释你所需要的一切