2010-08-05 5 views
3

Je souhaite enregistrer une capture d'écran de mon application Flex sur le serveur Web (LAMP). Voici le code Flex:Envoyer des données bitmap de Flex à Php

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

Maintenant, comment dois-je envoyer/recevoir ces données au serveur?

Répondre

5

Vous allez devoir utiliser un HttpService pour publier les données sur une page de votre site Web. Quand j'ai implémenté ceci, j'ai posté les données de l'image sous la forme d'une chaîne codée Base64 sur une page PHP qui utilisait la bibliothèque GD pour l'enregistrer dans un fichier png sur le serveur. Voici un exemple simplifié de ce que mon code ressemblait

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)"/> 

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

Du côté flex J'utilise le utilty de Base64Encode de dynamicflash , mais maintenant qu'il y en a un intégré dans Flex, vous pouvez l'utiliser à la place. Dans votre configuration php, vous devez vous assurer que la bibliothèque GD est activée pour que vous puissiez sauvegarder l'image.

Bien sûr, il s'agit d'un exemple très simple qui ne tient pas compte de toutes les questions de sécurité et de traitement des erreurs nécessaires, mais qui devrait vous fournir une bonne base de départ.

+0

thnx, c'était ce que je cherchais! – Chetan

+0

Thnx, ça a marché –

Questions connexes