开发者

Image from Flash BitmapData to PHP to webpage

I'm trying to display an image exported from a flash BitmapData in a basic webpage.

The export from flash works perfectly :

import flash.display.BitmapData;
var v开发者_运维知识库Bitmap = new BitmapData(300, 400, true, 0x000000);
vBitmap.draw(themovieclip_mc);
btn1.onRelease = function() {
    var vLV = new LoadVars();
    vLV.tableData = new Array();
    for (i=0; i<300; i++) {
        for (j=0; j<400; j++) {
            vLV.tableData.push(vBitmap.getPixel(j, i));
        }
    }
    vLV.send("webpage.php", "_self", "POST");
};

Then I get the image in the webpage.php file

    <?php
    $lv = $_POST['tableData'];
    $temp = explode(",",$lv);
    settype($temp[1],'integer');
    $img = imagecreatetruecolor(300,400);
    $k = 0;
    for($i=0; $i<300; $i++){
        for($j=0; $j<400; $j++){
            imagesetpixel($img,$j,$i,$temp[$k]);
            $k++;
        }
    }

$temporary_file_name = tempnam("/tmp");
imagejpeg($img,"$temporary_file_name",100);

?>

<html>
<img src="/tmp/<?php echo $temporary_file_name; ?>" />
<h1>Lorem ipsum</h1>
<p>lorem ipsum dolor sit amet</p>
</html>

the above code does NOT work, I can't find a way to display the image embedded in the webpage. Any help woud be really appreciated.


I am assuming that the insertion of the image data into the web page is your only problem. (without data, it's impossible to tell how well the image generation process itself works.)

I can't find a way to display the image embedded in the webpage

There isn't any good way to do this. You need to get the image from a separate image resource, there's no way around it (except data: URIs but those are broken).

You could write the avatar file into a temporary file:

$temporary_file_name = tempnam("/path/to/somedir");
imagejpeg($img,"$temporary_file_name",100);

then in the HTML, output:

 <img src='/somedir/<?php echo $temporary_file_name; ?>' />  

you would have to add some mechanism to remove the temporary file later.


So, I finally found my way through this. That might not be the best way to do it, but at least it works.

//AS3

import com.adobe.images.JPGEncoder;

function createJpg(aMovieClip, aQuality){
    var vSource = new BitmapData(200, 304, true, 0 );
    vSource.draw(aMovieClip, new Matrix(1,0,0,1,100,152)); // decale de width/2 et height/2
    var vEncoder = new JPGEncoder(aQuality);
    var vByteArray = vEncoder.encode(vSource);

    return vByteArray;
};

// export image to server
function exportJpg(aMovieClip){
    var vByteArray = createJpg(aMovieClip, 80);
    var vRequest:URLRequest = new URLRequest('URL_TO_THE_PHP_FILE');
    var vLoader: URLLoader = new URLLoader();
    vRequest.contentType = 'application/octet-stream';
    vRequest.method = URLRequestMethod.POST;
    vRequest.data = vByteArray;
    navigateToURL(vRequest, "_self");
};

// save image on users computer
function saveJpg(aMovieClip, aString){
    var vByteArray = createJpg(aMovieClip, 80);
    var vFR = new FileReference();
    vFR.save(vByteArray, aString);
};

Then the PHP/HTML file

<?php

if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {

    $img =  $GLOBALS["HTTP_RAW_POST_DATA"];
    $prefix = "foo";
    $path = "/full/server/path/to/directory/with/777/permissions";

    // give a unique name to the file
    $name = $prefix.md5(time().rand());

    $temporary_file_name = $path.'/'.$name.'.jpg';

    $fp = fopen($temporary_file_name, 'wb');    
    fwrite($fp, $img);
    fclose($fp);

    // find the name of the image without the full server path
    $array = explode("/", $temporary_file_name);
    $length = count($array);
    $filename = $array[$length - 1];

    //give a path to the image file
    $imagepath = "http://www.domain.com/directory/".$filename;


}else{
    // error : the POST data was not found
}

?>

<html>
<head>
</head>
<body>
    <h1>Lorem ipsum</h1>
    <p><img src="<?php echo $imagepath; ?>"</p>
</body>
</html>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜