我想在网络服务器(lamp)上保存flex应用程序的截图。
以下是flex代码:

    private function getBitmapData( target : UIComponent ) : BitmapData
        {
            var bd : BitmapData = new BitmapData( target.width, target.height );
            var m : Matrix = new Matrix();
            bd.draw( target, m );
            return bd;
        }

现在,如何向服务器发送/接收这些数据?

最佳答案

您将不得不使用httpservice将数据发布到您网站上的页面。当我实现这一点时,我将图像数据作为base64编码字符串发布到一个php页面,该页面使用gd库将其保存到服务器上的png文件中。下面是我的代码的一个简单示例
柔性代码

public function saveImg():void{
    var bd:BitmapData = new BitmapData(mycanvas.width,mycanvas.height);
    bd.draw(mycanvas);
    var ba:ByteArray = PNGEncoder.encode(bd);
    var encoded:String = Base64.encodeByteArray(ba);
    var objSend:Object = new Object;
    objSend.data = encoded;
    objSend.filename = _imgResult;

    writeImage.send(objSend);
 }

<mx:HTTPService id="writeImage" url="/saveImage.php" method="POST" resultFormat="text" result="resultHandler(event)"/>

php文件(saveimage.php)
<?php
//check for the posted data and decode it
if (isset($_POST["data"]) && ($_POST["data"] !="")){
    $data = $_POST["data"];
    $data = base64_decode($data);
    $im = imagecreatefromstring($data);
}
//make a file name
$filename = "test"

//save the image to the disk
if (isset($im) && $im != false) {
    $imgFile = "/etc/www/html/".$filename.".png";

    //delete the file if it already exists
    if(file_exists($imgFile)){
        unlink($imgFile);
    }

    $result = imagepng($im, $imgFile);
    imagedestroy($im);
    echo "/".$filename.".png";
}
else {
    echo 'Error';
}
?>

在flex方面,我使用的是dynamicflash中的base64encode实用程序,但是现在flex中已经有了一个内置的实用程序,您可以使用它来代替。在PHP配置中,您需要确保启用GD库,这样可以保存图像。
当然,这是一个非常简单的例子,并没有考虑到所需的所有错误处理和安全问题,但是应该为您提供一个良好的基础。

10-05 20:34
查看更多