[RESOLU]insertion d'image à la volé

Eléphant du PHP | 85 Messages

31 mars 2006, 15:29

bonjour a tous, j'aimerai afficher un graphique dynamique donc j'ai fais comme suit, voici la première partie:
<?php
require ('fonctions/histogramme.php');

$data = array(50, 20, 70, 100,130,60,40,80,90);
shuffle($data);
require ('fonctions/trait_img.php');
trait_cam($data);
?>
<html>
<header>
</header>
<body>
<img src="<?php hist_hori($data); ?>"> 
</body>
</html>
la deuxieme partie qui sera le traitement d'un camembert( non utilisé pour le momenttt mais les erreurs sont en fonction de ça):
<?php
function trait_cam($data){
//nbs d'element dans le tableau
$nbs_tab= count($data);
echo "l'ensemble des valeurs du tableau est de : ".$nbs_tab."<br>";
// total ajouté
$nbs_max= array_sum($data);
echo "le total des valeurs du tableau est de ".$nbs_max."<br>";	
//calcul du % de chaque élèment (calcul en °)
//print_r($data);
for ($i=0; $i<=9; $i++){
$pcent[$i]= round(($data[$i]*100)/$nbs_max);
}
//print_r($pcent);
//calcul de la valeur en degré
for ($a=0;$a<=9;$a++){
$degré[$a]= round(($pcent[$a]*360)/100);
//print_r($degré[$a]);
}
}
?> 
et la fonction de creation graphique
function hist_hori($data){
$hauteur="500";
$largeur="500";
$im=ImageCreate($largeur,$hauteur);
$blanc=ImageColorAllocate($im,255,255,255);
$noir=ImageColorAllocate($im,0,0,0);
$rouge=ImageColorAllocate($im,255,0,0);
$bleu=ImageColorAllocate($im,0,0,255);
//ligne horizontal
Imageline($im,50,$hauteur-20,$largeur,$hauteur-20,$noir);
//fin ligne horizontal
$maxdata=150;
    for ($jour=1; $jour<=9; $jour++) {
		$largeurImageRectangle = round(($data[$jour-1]*$largeur)/$maxdata);
	if($data[$jour-1]>=80){ //condition pour aff couleur
		ImageFilledRectangle ($im,50,$jour*50, $largeur-$largeurImageRectangle,$jour*50+14 , $rouge);
		ImageString ($im, 4, $largeur-$largeurImageRectangle+10, $jour*50, 150-$data[$jour-1], $noir); 
		}
	else{
        	ImageFilledRectangle ($im, 50, $jour*50, $largeur-$largeurImageRectangle, $jour*50+14, $bleu);
        	ImageString ($im, 4, $largeur-$largeurImageRectangle+10, $jour*50, 150-$data[$jour-1], $noir); 
    		}
					}
//aff jours
for($jour=1; $jour<=9; $jour++){
ImageString($im,4,40,$jour*50,$jour,$noir);}
//fin aff jours
//ligne vert
Imageline($im,50,10,50,$hauteur-20,$noir);
$tmp="";
$tmp.= header("content-type:image/png");
$tmp.= ImagePng($im);
return('im.png');
}
et pour finir l'erreur

Code : Tout sélectionner

l'ensemble des valeurs du tableau est de : 9 le total des valeurs du tableau est de 640 vªz
Modifié en dernier par konjiki le 19 avr. 2006, 19:29, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 mars 2006, 15:33

Les balises
[/b] quand on poste du PHP... :axe:

Eléphant du PHP | 85 Messages

31 mars 2006, 15:34

desolé :roll: je le ferai plus :oops: et j'ai oublier de vous mettre ca aussi
Cannot modify header information - headers already sent by (output started at /var/www/html/prog/fonctions/trait_img.php:22) in /var/www/html/prog/fonctions/histogramme.php on line 67

Mammouth du PHP | 19672 Messages

31 mars 2006, 15:46

Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 85 Messages

31 mars 2006, 16:00

:shock: si j'ai bien compris il faut que je deplace les lignes de codes "header". ok c'est parti ... Mais comme le header est contenu dans mes fonctions et que j'appel mes fonctions tout au long du programme ca va pas chier tout le temps :?: . Pourtant lorsque que je test separement ça marche... un coup de pouce svp :cry:
Desolé d'etre un newbizme

Eléphant du PHP | 312 Messages

31 mars 2006, 16:17

Comment ça séparément ?

Eléphant du PHP | 85 Messages

18 avr. 2006, 13:36

désolé pour le delais de la reponse :oops: , lorsque je test mes fonctions seules pas de problèmes, j'ai mon image mais dès que je l'insert dans dans mon fichier principale avec un include ou require j'ai un problème de "header". merci des reponses qui ont déja été postées.

Eléphanteau du PHP | 25 Messages

18 avr. 2006, 19:15

j'ai ue le meme probleme...

En fait tu veux afficher l'image?
si tu utilise Header, tu ne doit pas afficher de texte sur la meme page.


une methode est de creer l'image en dur:

Dans ton modul qui genere l'image, tu enléve:
$tmp=""; 
$tmp.= header("content-type:image/png"); 
$tmp.= ImagePng($im); 
return('im.png');
tu ajoute:
	imagepng($im,"nom_du_fichier.png");
	imagedestroy($im);

pour afficher ensuite ton image dans ta page HTML tu fait:
<img src="nom_du_fichier.png">
ou en PHP
echo "<img src=\"nom_du_fichier.png\"><br>";

j'espere bien avoir compris ton probleme.. ^^
Cordialement Thierry.

Eléphanteau du PHP | 25 Messages

18 avr. 2006, 21:30

graphique dynamique
Escuse, il y a un hic avec ce que j'ai exposé...

Ma facon de proceder c pour generer une image qui ne changera pas...
je m'explique.. l'image se regenere a chaque appel, mais coté client, l'utilisateur vera toujours la meme image car un protocol permet de ne pas recharger une image déja chargé...

oui, donc la génération du fichier imge n'est pas la bonne solution..

Desolez, je ne sais pas comment faire, pour l'instant autrement... mais je devrais aussi passé par la bientot.. car je travaille en ce momment meme avec la LIB GD...

Un Expert peut t'il repondre a sa question en corrigeant son Code. Merci
Cela servira pour plusieurs lecteur.
Cordialement Thierry.

Eléphant du PHP | 85 Messages

19 avr. 2006, 09:07

merci quand même Thierry je te tiens au courant dès que j'ai trouver une solution :wink: . Je vais quand même essayer ta première solution ça me donnera peut être des idées. :D

Eléphanteau du PHP | 25 Messages

19 avr. 2006, 14:26

je vois que tous le monde tombe dans le panneau la premiere fois ^^

Suivant les dire des autres postes... je viens de faire un test..
il faut faire deux fichiers distint.

regarde mon example:

index.php
<?php
echo "Generation dynamique d'image...<br>\n";
echo "<img src=\"image.php?txt=Hello\"><br>\n";
echo "<img src=\"image.php?\"><br>\n";
echo "Fin de la genration<br>\n";
?>


image.php
<?php	$size=100;

	if (isset($_GET['txt']))
	{	
		$string=$_GET['txt'];
	}
	else
		$string="texte de defaut";

$police = 3;
$taille_hauteur=imagefontheight($police);					// retourne la hauteur de la police font en pixels. 
$taille_largeur=imagefontwidth($police)*strlen($string)+10; //retourne la largeur de la police font en pixels.
$size_hauteur=$taille_hauteur+5;

$im = imagecreatetruecolor($taille_largeur, $size_hauteur);

$background  	= imagecolorallocate($im, 0 , 0, 255);
$couleurTexte 	= imagecolorallocate($im, 255, 0, 0);		// rouge
$couleurcadre 	= imagecolorallocate($im, 255, 255, 255);		// bleue

imagefilledrectangle($im, 0, 0, $taille_largeur - 1, $size_hauteur - 1, $background);
imagerectangle($im, 1, 1, $taille_largeur - 2, $size_hauteur - 2, $couleurcadre);

imagestring($im,$police,5,2,$string,$couleurTexte);  
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);


?>

j'ai essayé de placer le code et d'appeler cette fonction dans un meme fichier... cela ne fonctionne pas...

Donc Deux fichiers:
image.php qui effectue les traitements + le headers
et index.php qui appel le fichier image.php

 <img src="image.php">


Pour ton code..
A oui, mais toi le probleme ces que tu doit passé uin tableaux de valeurs..


je fais d'autre essais, en passant par un formulaire... et je reviens


Edit: arf, je n'arrive pas a passé une table de valeurs...
je post un message pour cela.. en esperant avoir la réponse pour ce soir ;-)
Cordialement Thierry.

Eléphant du PHP | 85 Messages

19 avr. 2006, 16:08

Merci pour tes efforts, apparament les experts ne sont pas là ou ne veulent pas répondre :? lol :-* . Bon on va bien y arriver, l'esprit combatif brule en moi :twisted: , quelque soit le moyen nous arriverons au bout :pouce:

Eléphanteau du PHP | 25 Messages

19 avr. 2006, 16:47

j'ai la solution, ca fonctionne tres bien..


index.php
	$values = array(2,12,14);  		 	// table de valeurs
	$values2= serialize($values);

	echo "Generation dynamique d'image...  Passage de string<br>\n";
	echo "<img src=\"image.php?cmd=string&txt=Hello\"><br>\n";

	echo "Generation dynamique d'image...  Passage de tableau<br>\n";
	echo "<img src=\"image.php?cmd=tab&txt=$values2\"><br>\n";
		
    echo "Fin de la generation<br>\n";


image.php
<?php	
	
	if (isset($_GET['cmd']))
		$cmd=$_GET['cmd'];
	else die("erreur: Commande non passé<br>");


if(strcmp($cmd,'string')==0)
{		
	if (isset($_GET['txt']))
		$string=$_GET['txt'];
	else
		$string="texte de defaut";
}
else if(strcmp($cmd,'tab')==0)
{
	
	if (isset($_GET['txt']))
		$values=unserialize($_GET['txt']);
	else
		$values= array(10,10);
		
	$string="";	
	foreach ($values as $value)
	{
		$string.=$value;
	}
}
else die("erreur: commande non reconnu<br>");
	 ecrit_txt($string);

function ecrit_txt($string)
{
		
$size=100;
			
$police = 3;
$taille_hauteur=imagefontheight($police);					// retourne la hauteur de la police font en pixels. 
$taille_largeur=imagefontwidth($police)*strlen($string)+10; //retourne la largeur de la police font en pixels.
$size_hauteur=$taille_hauteur+5;

$im = imagecreatetruecolor($taille_largeur, $size_hauteur);

$background  	= imagecolorallocate($im, 0 , 0, 255);
$couleurTexte 	= imagecolorallocate($im, 255, 0, 0);		// rouge
$couleurcadre 	= imagecolorallocate($im, 255, 255, 255);		// bleue

imagefilledrectangle($im, 0, 0, $taille_largeur - 1, $size_hauteur - 1, $background);
imagerectangle($im, 1, 1, $taille_largeur - 2, $size_hauteur - 2, $couleurcadre);

imagestring($im,$police,5,2,$string,$couleurTexte);  
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
}
Methode:
Dans index.php
--> utilise serialize() --> pour transformer ton tableau de valeurs en chaine
--> tu passe le string obtenu ( dans l'example image?txt= ... )

Dans image.php
--> $_Get pour recuper le string
--> utilise unserialize() --> pour retrouver ton tableau de valeur
--> et tu utilise tes valeurs pour generer ton image..


voila, avec un peu de patience.. on reussis a tous les coups.. ^^
J'ai encore apris quelque chose moi aujourdh'ui :P
Cordialement Thierry.

Eléphant du PHP | 85 Messages

19 avr. 2006, 19:27

:afraid: AAAAHHHHH trop cool ça marche plein pot \:D/ encore une fois je te remercie Thierry j'espère qu'on pourra encore s'entraider sur ce forum (ouai là c'est surtout toi qui m'a aidé :wink: ). A +