Comment intégrer une image à un template?

Résolu
takinelinfo Messages postés 13 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 juillet 2008 - 1 avril 2008 à 21:19
takinelinfo Messages postés 13 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 juillet 2008 - 7 avril 2008 à 22:04
Bonsoir,
Voila, j'ai actuellement un gros soucis, et j'ai besoin d'aide. Je voudrais intégrer une image à un template.
Tout d'abord j'ai une fonction php qui créée cette image:
<?php
function getImage()
{
   header("content-type:image/jpeg");
   $noir=ImagecolorAllocate ($image,0,50,80);
   ....
   imagefill ($image,0,0,$noir);
   ....
   ....
   imagejpeg($image);
   imageDestroy($image);
 
}
?>

En fait je voudrais l'intégrer à mon template.
J'avais donc pensé faire un truc comme ça:
<?php
$maPage->assign_vars(array('truc'=>bidule,'img'=>getImage()));
?>

Hors cela ne fonctionne pas, ça m'affiche l'image mais pas dans le template. Ca l'affiche comme lorsque l'on fait un echo, sur la sortie standard et non là ou je veux. Comment puis je faire? J'ai comme contrainte de ne pas sauvegarder l'image sur le serveur. Merci de toutes vos suggestions.

Y a t'il un moyen d'intégrer une image créée dynamiquement, sans l'enregistrer?
Si l'on doit l'enregsitrer, comment faire pour les supprimer au fur et a mesure afin qu'elle ne s'accumule pas sur el serveur?

J'avais fait un truc comme ça mais sans succés,
<?php
$path=getImage();
$page->assign_var('img','');
$page->affichePage('mapage.tpl');
unlink($path);
?>

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
1 avril 2008 à 23:25
Salut,

Décidément, il va vraiment falloir que je fasse un tuto sur comment fonctionne PHP par rapport au code HTML. Il s'agit là d'une des bases du fonctionnement d'un serveur web. Sans vouloir être méchant, il me parait difficile de faire du développement web sans avoir assimilé ça.

Une image générée à la volée, est un fichier complet envoyé par HTTP. Quand dans le code HTML le navigateur rencontre une balise du genre :

le navigateur effectue une AUTRE requpete sur le serveur HTTP, lui demandant de lui envoye l'image. Il recevra l'image et l'affichera à sa place, en fonction du code HTML.
Le serveur HTTP ne fera rien d'autre que fournir un fichier image.

Or, dans ton template, tu veux afficher l'image... Erreur... Tu veux générer du HTML qui affiche une image. C'est pas pareil.
Dans ton template, tu lui fournis l'url de l'image. Le navigateur va alors demander au serveur HTTP de lui fournir l'image que le navigateur lui demande.

L'image peut être de n'importe quelle nature : un fichier image (.png, .jpg, .gif, ...) ou un script qui génère une image.
Après tout, qu'est-ce qu'une image si ce n'est une série de 1 et de 0 arrangés de telle façon qu'avec le bon traitement l'oeil ne perçoive quelque chose qu'il connait ou peu interpréter ?

L'URL peut donc tout à fait être du style :

A ce moment là, le navigateur va appeler le script image.php avec comme argument param=valeur. C'est le serveur HTTP qui va se charger de gérer cette url (s'agit-il d'un fichier brut à renvoyer tel quel, ou bien d'un script à passer à un interpréteur, comme par exemple PHP ?).
Le navigateur s'attend simplement à recevoir des octets qui, mis bout à bout, forment une image. Il s'en cogne royal de savoir si l'url est celle d'un fichier, d'un script PHP, Python ou autre. Il demande simplement à Apache de lui envoyer les données qui correspondent à cette URL. Le navigateur, quand il les reçoit, puisqu'il s'agit d'une balise , s'attend à recevoir une image et traite le résultat de sa demande comme telle : il affiche ce qu'il pense être une image (tant pis si c'en est pas une et que ça plante : il n'affichera rien)

Pour revenir à ton problème : tu dois prévoir d'un côté un script qui génère l'image que tu veux. Il doit être capable de recevoir les arguments qui lui permettent de déterminer quelle image afficher (ou pas d'argument, il peut très bien afficher toujours la même image).
Dans ton template, tu dois simplement assigner à la variable l'url qui permet d'obtenir cette image (l'URL du script qui génère cette image, avec ou sans paramètres).

J'espère que c'est clair, parce que c'est vraiment élémentaire.

<hr size="2" width="100%" />Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
3
takinelinfo Messages postés 13 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 juillet 2008
7 avril 2008 à 22:04
Tout d'abord merci de ta réponse.
J'ai testé mais cela ne fonctionne pas
J'ai un truc comme ça:
<?php
function graphe($tabVal)
{
   $noir=ImagecolorAllocate ($image,0,50,80);
   ....
   imagefill ($image,0,0,$noir);
   ....
   ....
   imagejpeg($image);
}
?>

Appel à la fonction
<?php
$template->assign_block_vars('chose',array('graphe' => 'graphe($valeur).'" width="500" height="250" />',
                                                                    '...'=>'.............',
                                                                    '....'=>'..........'));
?>
Lorsque j'exécute la page, l'image apparait bien, mais il n'y a que elle sur la sortie. C'est un peu comme si elle ecrasée tout ce qu'il y avait avant. Si je met la ligne en commentaire donc:
<?php
$template->assign_block_vars('chose',array(//'graphe'
> 'graphe($valeur).'" width"500"
height="250" />',

                                                                    '...'=>'.............',

                                                                    '....'=>'..........'));

?>
Hormis l'image, tout s'affiche bien. Dés que je fais appel à l'image celle ci ce créée bien mais écrase tout le reste. D'où peut venir le problème?
3
Rejoignez-nous