Forums Développement Multimédia

Aller au contenu

comment exporter une image vers php ?

CODE Actionscript

11 réponses à ce sujet

#1 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 27 October 2008 - 11:58 AM

Bonjour,

Je cherche à envoyer un image vers PHP pour pouvoir la sauvegarder sur le serveur.

Voici mon code AS :

Action Script


import encoding.*;

//On fait une image de notre clip
var srcBmp:BitmapData = new BitmapData(monClip.width, monClip.height);
srcBmp.draw(monClip);

//On l'encode en jpg
var jpegEnc:JPGEncoder = new JPGEncoder(100); // qualité, entre 0 et 100
var imageData:ByteArray = jpegEnc.encode(srcBmp);

var variablesATransferer:URLVariables = new URLVariables();
variablesATransferer.monImage = imageData;

// création du loader
var monLoader = new URLLoader();
monLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

// création de l´objet URLRequest
var requeteInscription:URLRequest = new URLRequest("test.php");

// nous passons les variables dans l´url (tableau POST)
requeteInscription.method = URLRequestMethod.POST;

// associe les variables à l´objet URLRequest
requeteInscription.data = variablesATransferer;

// envoi les données de manière transparente, sans ouvrir de nouvelle fenêtre navigateur
monLoader.load(requeteInscription);
navigateToURL(requeteInscription);

code php

Action Script


if (isset($_POST['imagePanneau']) && isset($_POST['nomImage'])) {
$cheminFichier = 'images/uploads/temp/'. $_POST['nomImage'];

$fichier = fopen($cheminFichier, "w");
$fichier = $_POST['imagePanneau'];
fclose($fichier); //erreur : Warning: fclose(): supplied argument is not a valid stream resource

//imagejpeg($_POST['imagePanneau'], $cheminFichier); //erreur : Warning: imagejpeg(): supplied argument is not a valid Image resource
}

Il doit y avoir un problème avec mes variables dans le flash car si je ne fais pas navigateToURL, j'ai le message d'erreur suivant : Error: Error #2101: La chaîne transmise à URLVariables.decode() doit être une requête au format de code URL contenant des paires nom/valeur.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables()
at flash.net::URLLoader/onComplete()

Si je laisse le navigateToURL, les variables sont bien transférées et je peux toutes les utiliser avec php sauf la ByteArray justement. Comment dois-je procéder ?

Merci d'avance.

Sapher

#2 alert

  • Members
  • PipPipPipPipPipPipPipPip
  • 1693 messages

Posté 27 October 2008 - 12:07 PM

pour le byte array tu dois passer en amf et donc avec amfphp...

#3 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 09:13 AM

Salut et merci pour ta réponse.
Je regarde ça...

#4 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 10:38 AM

J'ai trouvé un tuto qui fait ce que je recherche mais avec flex : http://www.sephiroth.it/tutorials/flashPHP/amfphp_bytearray/ .
Je n'arrives pas à l'adapter pour flash cs3... icon_cry.gif
Quelqu'un peut il m'éclairer là dessus ? gourou.gif

Merci d'avance...


#5 yoxos

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3757 messages

Posté 28 October 2008 - 10:57 AM

http://www.bytearray.org/?p=90

#6 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 12:30 PM

Ok merci. ça ressemble énormément à ce que j'avais déjà fait mais le résultat est le même : la page firefox me dit : transfert des données depuis 127.0.0.1... et puis rien. Peut être que quelque chose est mal configuré dans mon gateway.php (bien qu'il soit identique a celui de l'exemple de Thibault Imbert) ou dans mon php.ini ...

Je poste mon code au cas où quelqu'un verrais un truc que j'aurais loupé.

La classe PHP:

Action Script


<?php
class JPEGEncoder {
function JPEGEncoder() {
}

/**
@desc save the JPEG on server
*/
function saveToServer($pInfos) {
$bytearray = $pInfos["jpegstream"];
// bytearray is in the ->data property
$imageData = $bytearray->data;
$idimage = $pInfos["nomImage"];

//Ligne ci-dessous : si je met un chemin en + du nom du fichier, il n'y a pas de freeze mais le responder me renvoie vers onFault
return ($success = file_put_contents($idimage, $imageData)) ? $idimage : $success;
}
}
?>

Le code AS3

Action Script


import encoding.*;

var gateway:String = "http://127.0.0.1/bonsoir/amfphp/gateway.php";
var connection:NetConnection;
var responder:Responder;

function test(e:Event):void {
//On créé une variable nomImage qui va récupérer le nom de l'image générée et temporairement stockée sur le serveur
var nomImage:String = creerNomAleatoire();

//On fait une image de notre panneau
var srcBmp:BitmapData = new BitmapData(monBouton.width, monBouton.height);
srcBmp.draw(monBouton);

//On l'encode en jpg
var jpegEnc:JPGEncoder = new JPGEncoder(10); // qualité, entre 0 et 100
var imageData:ByteArray = jpegEnc.encode(srcBmp);

sendData(nomImage, imageData);
}

// Method run when the "Send To Server" button is clicked.
function sendData(nomImage:String, image:ByteArray):void {
monTexte.text = "Sending Data to AMFPHP : " + nomImage;
// Get the data from the input field
var params:Object = {nomImage:nomImage, jpegstream:image};
// Send the data to the remote server.
connection.call("jpegencoder.JPEGEncoder.saveToServer", responder, params);
}

// Handle a successful AMF call. This method is defined by the responder.
function onResult(event:Event):void {
monTexte2.text = "ok sa marche";
}

// Handle an unsuccessfull AMF call. This is method is dedined by the responder.
function onFault(fault:Object):void {
monTexte2.text = "ya une couille dans l'pate !";
}

function init():void {
monBouton.addEventListener(MouseEvent.CLICK, test);

// Responder to handle data returned from AMFPHP.
responder = new Responder(onResult, onFault);
connection = new NetConnection;
// Gateway.php url for NetConnection
connection.connect(gateway);
}

this.init();



#7 yoxos

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3757 messages

Posté 28 October 2008 - 12:44 PM

quelle version de php as-tu? quelle version d'amfphp? as-tu testé amfphp avec un service tout simple genre helloworld?

#8 alert

  • Members
  • PipPipPipPipPipPipPipPip
  • 1693 messages

Posté 28 October 2008 - 12:57 PM

ATTENTION il faut que tu soit en amf3 pour le byte array !

#9 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 13:19 PM

Re
Je teste en local pour l'instant avec EasyPHP 2.0.0.0 donc PHP5 et amfphp-1.9.beta.20080120.
Le hello world fonctionne. Même l'exemple de T.Imbert fonctionne (sauf la fonction télécharger sur le dd du client mais ça à la limite je m'en fous).

Amf3 ? icon_redface.gif je vais demander a google ce que c'est...

#10 alert

  • Members
  • PipPipPipPipPipPipPipPip
  • 1693 messages

Posté 28 October 2008 - 13:23 PM

ah ? tu connais google ?
tu peux lui demander d'arreter de mettre des pubs dans mon gmail stp smile.gif
merci ...

amf3 est une autre version d'amf (qui supporte le byte array) la config doit se faire dans code as3

exemple:

Action Script

rs = new NetConnection();
rs.objectEncoding = ObjectEncoding.AMF3;
rs.connect(gateway)


#11 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 13:30 PM

ok merci je vais voir en rajoutant cette ligne.
sinon je viens de voir que lorsque je teste l'animation directement depuis l'ide de flash j'ai ce message d'erreur lorsque je clique sur mon bouton :

Error #2044: NetStatusEvent non pris en charge : level=error, code=NetConnection.Call.BadVersion
at test_fla::MainTimeline/init()
at test_fla::MainTimeline/frame1()

Pas vu avant car je testais directement via le navigateur

PS: pour google il a dit qu'il allait y réfléchir icon_wink.gif

Modifié par Sapher, 28 October 2008 - 13:30 PM.


#12 lord-sapher

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 28 October 2008 - 14:13 PM

C'est officiel je suis un boulet icon_evil.gif
A force de copier coller différents tutos sur le même fichier forcément on fini par avoir une erreur à la con qu'on arrive pas à voir.
function onResult(result:Event):void au lieu de function onResult(result:Object):void...
voilà pourquoi mon message de confirmation ne venaient jamais...
quand aux images, elles ont bien été sauvées mais dans le répertoire services/jpegencodeur/ (je pensais qu'en ne mettant rien ça les copierait a la racine du serveur web)

merci à vous 2 pour votre aide et votre patience gourou.gif



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)