Php mysql creer une image GD avec les 10 premiers enregistrement de la table

Résolu
wspxenondesign - 9 août 2012 à 14:31
 wspxenondesign - 21 août 2012 à 13:29
Bonjour a tous,
Je viens vers vous car je suis novice , je commence un peu a travailler sur la librairie GD.
après quelques essais que j'ai effectué.
voila ma question :
j'effectue un boucle while pour récupérer les 10 premiers enregistrement($donnees = $row['nom'];)si je fais un echo cela m'affiche bien les 10 premiers
mais quand je passe a l’opération de création d'image , j'ai bien une image mais avec un seul enregistrement inscrit.



//////////////////////////////////////////////////---MON CODE """"""""header ("Content-type: image/png");"""""""""
$affichage = mysql_query("SELECT id, nom, point, emission FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error());
while( $row = mysql_fetch_array( $affichage ) ){

$donnees = $row['nom'];

$image = imagecreate(250,300);
$orange = imagecolorallocate($image, 255, 128, 0);
$bleu = imagecolorallocate($image, 0, 0, 255);
$bleuclair = imagecolorallocate($image, 156, 227, 254);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 4 , 35 , 15 , $donnees , $blanc);


imagepng($image);

}
merci pour votre aides
cordialement Thierry

4 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
14 août 2012 à 04:50
En fait il faut voir la création d'une image comme la suite de procédés suivante:

déclaration -> construction de l'image (i.e. dessin) -> production de l'image affichable -> fin.

C'est très linéaire comme fonctionnement. En gros, GD crée une image à la fois (en tout cas lorsque tu "affiches directement" (i.e. pas dans un fichier) ton image.

Du coup ta première image est créée puis l'appel à imagepng() indique la fin du processus de création.

Pour créer plusieurs images, tu peux faire un truc du genre

fichier affichage.php
<?php
//...
$affichage = mysql_query("SELECT id FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error()); 
while( $row = mysql_fetch_array( $affichage ) ){
    echo '';
}
//...
?>


image.php
header ("Content-type: image/png");""""""""" 
$affichage = mysql_query("SELECT nom, point, emission FROM vote WHERE id='".mysql_real_escape_string($_GET['id']."') or exit (mysql_error());
$row = mysql_fetch_assoc( $affichage )

$donnees = $row['nom']; 

$image = imagecreate(250,300); 
$orange = imagecolorallocate($image, 255, 128, 0); 
$bleu = imagecolorallocate($image, 0, 0, 255); 
$bleuclair = imagecolorallocate($image, 156, 227, 254); 
$noir = imagecolorallocate($image, 0, 0, 0); 
$blanc = imagecolorallocate($image, 255, 255, 255); 

imagestring($image, 4 , 35 , 15 , $donnees , $blanc); 
imagepng($image);


(code pas testé et pas spécialement propre, c'est juste pour te donner une piste de comment on peut faire).
3
xranto Messages postés 90 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 31 mars 2014
20 août 2012 à 10:35
Bonjour,

une autre solution est de séparer l'initialisation des données, de la création de l'image. tel que :

//////////////////////////////////////////////////---MON CODE """"""""header ("Content-type: image/png");""""""""" 
$affichage = mysql_query("SELECT id, nom, point, emission FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error()); 
$donnees="";

while( $row = mysql_fetch_array( $affichage ) ){ 
    $donnees .= $row['nom']; 
}

$image = imagecreate(250,300); 
$orange = imagecolorallocate($image, 255, 128, 0); 
$bleu = imagecolorallocate($image, 0, 0, 255); 
$bleuclair = imagecolorallocate($image, 156, 227, 254); 
$noir = imagecolorallocate($image, 0, 0, 0); 
$blanc = imagecolorallocate($image, 255, 255, 255); 

imagestring($image, 4 , 35 , 15 , $donnees , $blanc); 
imagepng($image); 


la différence est que le code de JulSoft va créer 10 images contenant un row pour chaque image.
par contre, ce code va créer 1 image contenant les 10 rows. Mais il te reste de rechercher comment mettre chaque row sur une ligne.
3
wspxenondesign
21 août 2012 à 13:20
bonjour à tous merci pour vos réponses
je prendrai le code de XRANTO : ce que je veux faire c'est bien une seule image avec les 10 $row

Mais j'ai encore une petite question : je voudrais mettre les résultats non pas derrière les autres mais en dessous de autres.

Entre deux, j'avais essayer un autre code.qui fonctionne aussi mais qui est beaucoup trop long
. le voici :

Je suis sur qui y a plus simple sans devoir passer par un fichier extérieur:


////////////////////
$affichage = mysql_query("SELECT id, nom, point FROM vote WHERE emission='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error());
$monfichier = fopen('aa.txt', 'w+');
$moi ="";

fputs($monfichier, $moi);

fclose($monfichier);
while( $row = mysql_fetch_array( $affichage ) ){

$donnees = $row['nom'];
$voting = $row['point'];
$donnees = Tronquer_Texte($donnees , 30);
$donnees = $donnees."-";
//$donnees = addslashes ($donnees);
//print $donnees;


$monfichier = fopen('aa.txt', 'a+');


fputs($monfichier, $donnees);

fclose($monfichier);



}



mysql_close();


$monfichier = fopen('aa.txt', 'r+');

// 2 : on lit la première ligne du fichier
$ligne = fgets($monfichier);

// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);

$image_path = "votedjs.jpg";
$lignes = explode("-",$ligne);
$font = 'LucidaSansDemiBold.ttf';
//header ("Content-type: image/png");
$image = imagecreate(303,453);
$image2 = imagecreate(333,433);
$orange = imagecolorallocate($image, 232, 232, 232);
$orange2 = imagecolorallocate($image2, 57, 232, 57);
$bleu = imagecolorallocate($image, 128, 128, 128);
$bleuclair = imagecolorallocate($image, 255, 0, 0);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
$source4 = imagecreatefromJPEG("logo.jpg");
$source1 = imagecreatefromJPEG("barre.jpg");
$source2 = imagecreatefromJPEG("topdj.jpg");
imagecopymerge($image2, $image, 0, 0, 0, 0, 313, 413, 100);
imagecopymerge($image, $source2, 80, 5, 0, 0, 170, 45, 100);
$a = "60";
imagecopymerge($image, $source1, 0, 10, 0, 0, 57, 375, 100);
imagecopymerge($image, $source4, 40, 200, 0, 0, 252, 255, 20);

//imagestring($image, 4 , 60 , 20 , $lignes[0] , $noir);
//imagettftext($image, 10, 0, 60, 20, $bleu, $font, $lignes[0]);
imagettftext($image, 10, 0, $a, 70, $bleuclair, $font, $lignes[0]);
imagettftext($image, 10, 0, $a, 100, $noir, $font, $lignes[1]);
imagettftext($image, 10, 0, $a, 132, $noir, $font, $lignes[2]);
imagettftext($image, 10, 0, $a, 165, $noir, $font, $lignes[3]);
imagettftext($image, 10, 0, $a, 198, $noir, $font, $lignes[4]);
imagettftext($image, 10, 0, $a, 231, $noir, $font, $lignes[5]);
imagettftext($image, 10, 0, $a, 264, $noir, $font, $lignes[6]);
imagettftext($image, 10, 0, $a, 293, $noir, $font, $lignes[7]);
imagettftext($image, 10, 0, $a, 325, $noir, $font, $lignes[8]);
imagettftext($image, 10, 0, $a, 355, $noir, $font, $lignes[9]);

imagepng($image);
imagepng ($image, $image_path);
imagedestroy($image);
//////////////////////////////////////////////////////
0
wspxenondesign
21 août 2012 à 13:29
0
Rejoignez-nous