Forums Développement Multimédia

Aller au contenu

Loader des images distantes dans un MovieClip? ou pb de sécurité?

CODE Actionscript

18 réponses à ce sujet

#1 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 06 November 2008 - 23:33 PM

Bonjour
est-il possible de loader des images distantes (telles que provenant de Google Images, par exemple) dans un MovieClip généré on the fly?
Je pense pouvoir arriver à récupérer l'adresse de l'image via un petit script:

Action Script

var t:String = "<img>ici, l'adresse de mon excellente image!</img>";
//je mettrai ci-dessus le résultat de monXML:XML=new XML();
//qui parsera une adresse web quelconque telle que
//"http://images.google.fr/images?hl=fr&q=".push(maVariable).push("&btnG=Recherche+d%27images&gbv=2")
t = t.split("<img>").pop();
var r:Number=t.indexOf("</img>",0);
var e:String=t.substring(0,r);
trace (e);
Mais bon, avant d'aller plus loin dans ce sens, je suis saisi d'un doute: sera-t-il possible de charger ces images, ou le fait qu'elles soient distantes posera-t-il un pb de sécurité pour Flash?
Merci,
Cyrill

Modifié par kadosh, 06 November 2008 - 23:36 PM.


#2 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 06 November 2008 - 23:42 PM

Je ne crois pas que loading de l'image pose problème (quoi que avec toutes les sécus ajoutées dernièrement je ne suis pas certain..)
Par contre là où je suis certain c'est que faire un bitmapData avec une image chargée sur un serveur n'ayant pas un crossdomain autorisant le domaine contenant le SWF alors la sandbox t'enverras bouler wink.gif

Une solution est d'avoir un script PHP qui charge l'image, l'enregistre sur le serveur local, et là tu peux t'amuser avec l'image wink.gif

#3 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 06 November 2008 - 23:46 PM

Citation (Durss @ Nov 6 2008, 10:42 PM) Voir le message
Je ne crois pas que loading de l'image pose problème (quoi que avec toutes les sécus ajoutées dernièrement je ne suis pas certain..)
Par contre là où je suis certain c'est que faire un bitmapData avec une image chargée sur un serveur n'ayant pas un crossdomain autorisant le domaine contenant le SWF alors la sandbox t'enverras bouler wink.gif

Une solution est d'avoir un script PHP qui charge l'image, l'enregistre sur le serveur local, et là tu peux t'amuser avec l'image wink.gif

Salut et merci de ta réponse!
C'est cette satanée histoire de sandbox que je craignais, lol!
En php, oui, c'est clair que ça marcherait, mais c'est justement ce que je voulais éviter, télécharger les images, puisqu'en fait je voudrais qu'elles dépendent d'un choix de l'useur, donc pas de page xhtml précisée par avance... Comme dans "http://images.google.fr/images?hl=fr&q=".push(maVariable).push("&btnG=Recherche+d%27images&gbv=2"), où la page varie suibant la valeur de maVariable...

Modifié par kadosh, 06 November 2008 - 23:50 PM.


#4 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 06 November 2008 - 23:54 PM

Si t'as pas besoin de faire de traitement bitmap sur les images (donc juste de l'affichage) normalement tu pourras charger les images sans problème.
Je viens de faire un test histoire d'être fixé et ça fonctionne wink.gif

Comme je t'ai dit tu sera bloqué seulement si tu essaye de retracer l'image dans un bitmapData.

#5 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 06 November 2008 - 23:56 PM

Citation (Durss @ Nov 6 2008, 10:54 PM) Voir le message
Si t'as pas besoin de faire de traitement bitmap sur les images (donc juste de l'affichage) normalement tu pourras charger les images sans problème.
Je viens de faire un test histoire d'être fixé et ça fonctionne wink.gif

Comme je t'ai dit tu sera bloqué seulement si tu essaye de retracer l'image dans un bitmapData.

Cooool! Merci beaucoup!

#6 Xarald

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2179 messages

Posté 07 November 2008 - 08:33 AM

Citation (Durss @ Nov 6 2008, 11:54 PM) Voir le message
Si t'as pas besoin de faire de traitement bitmap sur les images (donc juste de l'affichage) normalement tu pourras charger les images sans problème.
Je viens de faire un test histoire d'être fixé et ça fonctionne wink.gif

Comme je t'ai dit tu sera bloqué seulement si tu essaye de retracer l'image dans un bitmapData.



De toute facon rien n'empêche de faire un script PHP qui récupere en parametre get l'url de l'image google, et qu'il s'occupe de faire le fopen a la volé ? non ?

#7 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 10 November 2008 - 21:37 PM

Citation (Durss)
Une solution est d'avoir un script PHP qui charge l'image, l'enregistre sur le serveur local, et là tu peux t'amuser avec l'image


on est d'accord wink.gif

#8 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 13 November 2008 - 10:28 AM

Citation (Durss @ Nov 10 2008, 08:37 PM) Voir le message
on est d'accord wink.gif

Bonjour,
j'ai réussi à faire ça sans PHP, mais voilà, ça marche très bien en local, mais pas sur mon serveur? Je ne comprends pas pourquoi?
Merci par avance si vous pouvez m'éclairer!!!

Action Script

function envoi():void	{
maVariable=envoi_txt.text.toString();
var chargeur:URLLoader = new URLLoader ();
//var adress:String=("http://images.google.fr/images?hl=fr&q="+maVariable+"&btnG=Recherche+d%27images&gbv=2");
var adress:String=("http://fr.altavista.com/image/results?itag=ody&q="+maVariable+"&mik=photo&mik=graphic&mip=all&mis=all&miwxh=all");
var adresse:URLRequest = new URLRequest (adress );
var format = URLLoaderDataFormat.TEXT;
var conteneur2:Sprite=new Sprite();
conteneur2.alpha= 0;
chargeur.dataFormat = format;
chargeur.load(adresse);
chargeur.addEventListener(Event.COMPLETE, finDuChargement);

Action Script

function finDuChargement ( event:Event ) {
var contenu = event.target.data;
t=(contenu);
// t = t.split("imgurl=").pop();
t = t.split("class=\"thumbnail\" src=\"").pop();
//trace(t);
// var r:Number=t.indexOf("&img",0);
var r:Number=t.indexOf("\"",0);
var e:String=t.substring(0,r);
//trace(e);
var image:Loader = new Loader();
var url2:URLRequest = new URLRequest(e);
image.load(url2);
stage.addChild(conteneur2);
image.addEventListener(Event.COMPLETE, loaderCompleteHandler);
image.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);
conteneur2.addChild(image);


#9 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 15 November 2008 - 15:50 PM

Y a-t-il un filtre appliqué sur l'un des parents de tes Loader?
Je suis pas certain de moi mais le filtre faisant (je pense) un bitmapData du conteneur pour y appliquer les effets, ça ne me surprendrait pas que ça vienne de là (sans conviction ^^)

Quand tu dis "ça ne marche pas", qu'est-ce qui ne marche pas? Les images ne sont pas chargées?
T'as bien tout tracé pour vérifier? Dans fiddler tu vois le chargement des images?
Regarde dans flashTracer ou SOSMax (ou autre) si t'as un problème de sandbox ça te le diras (pense à tester avec le player debug sinon tu verras rien).

Ca pourrait bien être un problème de sandbox car en local le player ne bloque rien.
Mais dés que le flash est déployé sur un serveur les restrictions sont bien là (ce qui semble être ton cas)

Si tu veux mettre en place un script PHP l'idée de Xarald est pas mal et ça t'évite d'uploader le fichier sur ton server.
Ca se résumerait en gros :

<?php

$url	= $_GET['imgUrl'];
$pInfo	= pathinfo($url);
$ext	= $pInfo['extension'];
header("Content-Type: image/".$ext);

if($ext == "gif") {
	$image = imagecreatefromgif($url);
	imagegif($image);
}
if($ext == "jpg" || $ext == "jpeg") {
	$image = imagecreatefromjpeg($url);
	imagejpeg($image);
}
if($ext == "png") {
	$image = imagecreatefrompng($url);
	imagepng($image);
}

?> 

J'ai pas réussit à le faire fonctionner donc je te le dis tout de suite ça fonctionne pas mais l'idée est là icon_biggrin.gif.
Le php est loin derrière moi du coup j'ai quelque peut tout zappé.. demande sur des forums PHP ils sauront te répondre wink.gif

Le but de ce script est de charger l'image et de la retransmettre aussitôt. Ainsi flash va penser que l'image vient bien du serveur local et devrait t'autoriser à faire du traitement dessus.


Bref bon courage icon_biggrin.gif

#10 tibibi0508

  • Members
  • PipPipPipPipPipPipPipPip
  • 1704 messages

Posté 15 November 2008 - 16:48 PM

Bonsoir,

Cela me semble compliqué icon_confused.gif

Ceci devrais être suffisant:

Action Script

<?php
$url = $_POST["url"];
readfile($url);
?>

coté as:

Action Script

var adresse:URLRequest = new URLRequest ( "myPhp.php" );
var adress:URLVariables = new URLVariables();

adress.url = "http://images.google.fr/images?hl=fr&q="+maVariable+"&btnG=Recherche+d%27images&gbv=2";

adresse.data = adress;

adresse.method = URLRequestMethod.POST;

chargeur.load ( adresse );

P.S A la base Thibault Imbert avait fait un exemple du genre icon_smile.gif

++icon_wink.gif

#11 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 15 November 2008 - 17:03 PM

J'ai bien l'impression de m'être fait chier pour rien effectivement ^^.
Par contre j'arrive pas à faire fonctionner ton exemple...
Après c'est peut-être juste mon test qui est foireux. Je test juste dans le navigateur (pas avec flash).

A chaque fois j'ai :
Citation
L'image “http://localhost/[blablabla]/testphp?imgUrl=http://[blablabla].gif” ne peut être affichée car elle contient des erreurs.


J'ai ajouté la modification du header à ton script sinon ça se contentait d'afficher l'image en text (ça ressemble à rien quoi ^^) mais ça marche pas quand même...

C'est pas le drame puisque j'en ai pas besoin mais j'aimerais bien comprendre quand même
Après peut-être que ton script fonctionne pour un affichage dans flash je sais pas...

(oh l'autre comment y squate le topic des autres...)
icon_mrgreen.gif

#12 tibibi0508

  • Members
  • PipPipPipPipPipPipPipPip
  • 1704 messages

Posté 15 November 2008 - 17:07 PM

J'ai une idée icon_biggrin.gif Je vais tester mon truc aussi car je ne sais pas non plus si ça marche icon_redface.gif

icon_mrgreen.gif

#13 tibibi0508

  • Members
  • PipPipPipPipPipPipPipPip
  • 1704 messages

Posté 15 November 2008 - 17:33 PM

icon_sad.gif J'y arrive pas non plus icon_sad.gif

Désolé, si j'arrive à quelque chose je post

++icon_wink.gif

#14 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 15 November 2008 - 17:36 PM

coul jme sent moins boulet ^^

#15 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 21 November 2008 - 23:41 PM

Hé bé, une semaine sans passer chez Mediabox et je vois que ça y va! icon_razz.gif
Plus sérieusement, j'ai bossé sur autre chose cette semaine, mais on s'y remet lundi, si on trouve la solusse, avec ou sans php, je la posterai ici... On a plein de trucs qui marchent impec en local, mais nada en distant. Pour les images, quand je disais "ça marche pas", je voulais dire qu'on voit bien en bas de Firefox "en attente de www.monsitedimages.org", mais rien ne s'affiche jamais. Egalement, tous les raccourcis clavier customisés marchent en local, mais plus rien une fois sur le serveur. Bref, un grand mystère pour moi, cette histoire de sandbox...
Cyrill

#16 durss

  • Members
  • PipPipPipPipPipPipPipPip
  • 1965 messages

Posté 22 November 2008 - 11:27 AM

Je te conseil de regarder avec Fiddler pour voir ce qu'il se passe exactement.
Si tu vois qu'il essaye de charger un crossdomain.xml et qu'il ne le trouve pas (erreur 404) alors il y a de grandes chances pour que ça vienne de là.
Le coup des raccourcis clavier... là je voit pas :/

#17 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 22 November 2008 - 11:37 AM

Ben pourtant dans ma recherche d'images , je suis passé de google à altavista parce que ils avaient un cross-domain-policy file, contrairement à gogol... Et ça n'a rien changé.
Pour le clavier, je pense que c'est autre chose, plus une histoire de focus, parce qu'on a de multiples swf imbriqués.
Concernant les sandbox, auxquelles je ne comprends rien, ce qui est bizarre, c'est que le widget Air qu'on a créé reçoit bien les données (pour l'instant un sinus en continu depuis le serveur, widget disponible ici: http://www.jetedemandedemedemander.fr/site...le_Calmel.html), mais le swf sur le site ne reçoit rien du tout, lui... Alors qu'en local, via Flash ou via Flash Player, il reçoit bien!
C'est un truc de fou, ces histoires de sécurité...
Bon we!
C++

Modifié par kadosh, 22 November 2008 - 11:42 AM.


#18 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 22 November 2008 - 11:43 AM

virer la parenthèse à la fin de l'url, dsl... j'ai essayé d'éditer le message et bouger le tag /url, mais sans succès...

Modifié par kadosh, 22 November 2008 - 11:45 AM.


#19 achim.bloch

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 236 messages

Posté 22 November 2008 - 11:50 AM

Ah, et je précise, passque c'est un sacré bordel, ce site: le sinus est visible via le widget Air à droite (installation du widget sur votre ordi), et est censé être visible de la même manière via le bouton AIR (le premier à gauche sur la scène). Ce bouton marche impec en local, mais pas en distant. (et y a plein d'autres bugs non liés, mais on est en plein dev, c'est pas fini!)



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

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