从Flex发送位图数据到Php [英] Send bitmap data from Flex to Php

查看:171
本文介绍了从Flex发送位图数据到Php的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Web服务器(LAMP)上保存我的Flex应用程序的屏幕截图。
这里是Flex代码:

pre prerivate $ 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文件中。这里是我的代码看起来像一个简单的例子

Flex Code

  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 =编码;
objSend.filename = _imgResult;

writeImage.send(objSend);

$ b $ lt; mx:HTTPService id =writeImageurl =/ saveImage.phpmethod =POSTresultFormat =textresult =resultHandler(event)/ >

PHP档案(saveImage.php)

<$ ($ set($ _ POST [data])&&(pre $ p $ <?php
//检查发布的数据并解码它
_POST [data]!=)){
$ data = $ _POST [data];
$ data = base64_decode($ data);
$ im = imagecreatefromstring($ data);

//创建文件名
$ filename =test
$ b $ //将图像保存到磁盘
if(isset($ im)&& $ im!= false){
$ imgFile =/etc/www/html/\".$filename.\".png;

//如果文件已经存在,删除文件
if(file_exists($ imgFile)){
unlink($ imgFile);
}

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

在flex的一面,我使用了来自dynamicflash的Base64Encode实用程序,但现在有一个内置的flex你可以用它来代替。在你的php配置中,你需要确保你已经启用了GD库,这样你才能保存图像。

当然这是一个非常简单的例子,考虑到所有错误处理和安全问题,但是应该为你提供一个很好的基础。


I want to save a screenshot from my Flex app on the Webserver (LAMP). Here is the Flex code:

    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;
        }

Now, how do I send / receive this data to the server?

解决方案

You are going to have to use a HttpService to post the data to a page on your website. When I implemented this I posted the Image data as a Base64 encoded string to a PHP page that used the GD library to save it to a png file on the server. Here is a simplified example of what my code looked like

Flex Code

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 File (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';
}
?>

On the flex side I am using the Base64Encode utilty from dynamicflash, but now that there is one built into flex you could use that instead. In your php config you will need to make sure you have the GD library enabled so that you can save the image.

Of course this is a very simple example and does not take into account all the error handling and security concerns needed, but should provide you a good base to get going with.

这篇关于从Flex发送位图数据到Php的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆