Aller au contenu

[Résolu] Image dynamique (php -> jpg)


ZyriK

Messages recommandés

Bonjour, je m'explique rapidement :

J'aimerais savoir si c'est possible de faire une liste du contenu d'un champ sur mySQL en image.

J'arrive a faire une image dynamique, mais comme ca ne prend pas en compte les sauts de ligne, il faut un imagestring pour chaque ligne de texte ...

Je sais pas si j'ai été assez clair, si vous ne comprenez pas dites le moi et je reformule ma question.

Merci d'avance. :fumer:

Lien vers le commentaire
Partager sur d’autres sites

augh?

Pourquoi tu veut des sauts de lignes ? Pour placer le texte sur ton image ?

-> Ca ca se fait avec des coordonnées...

Pour sauter des lignes à chaques requêtes ? <br /> ça peut marcher...

Sinon t'as qu'a faire un truc avec des TR TD et un Include (tonfichieravectesrequêtes) .....

Lien vers le commentaire
Partager sur d’autres sites

C'est pas compliqué (pas compliqué du tout même) :

un petit exemple rapide (en prennant en compte que tu as déja créé ton image et fait ta requete)

// $im correspond à ton image
// $textcolor correspond à la couleur de ton texte
// $string correspond à une chaine de caractère avec (ou sans) sauts de lignes

$t = explode("\n", $string);
$i = 0;

while ($i < sizeof($t)) {
imagestring($im, 10, 0, $i*12, $t[$i], $textcolor);
$i++;
}

Enfaite, il suffit de jouer sur la position de ton texte, d'où le $i*12 qui ferra descendre chaque ligne de 12 pixels.

Lien vers le commentaire
Partager sur d’autres sites

En fin de compte j'arrive pas a m'en sortir ... J'avoue que je n'ai pas encore beaucoup d'experience dans ce domaine ...

Je m'explique plus clairement (enfin je vais essayer :cartonrouge:)

J'ai le titre et le contenu des articles de mon site dans la base SQL.

Ce que je voudrais faire c'est afficher tout les articles en liste sur une image dynamique. Pour bien sur eviter de devoir les rajouter a la main (donc en evitant de modifier l'image et de rajouter un imagestring pour chaque ligne)

Si j'ai bien compris ton code, tu recopie simplement le contenu de $string sur chaque ligne, ou je me trompe ?

Lien vers le commentaire
Partager sur d’autres sites

Je copie une partie de $string (ici $t[$i]) sur chaque ligne. Je vais t'expliquer rapidement mon code :

$t = explode("\n", $string);

Me permet de séparer chaque ligne pour les mettres dans un tableau nommé $t. Donc $t[0] sera la ligne 1, etc...

$i = 0;

while ($i < sizeof($t)) {

est tout simplement le début de la boucle, qui va afficher chaque ligne (un for aurait peut-être plus sa place ici)

	imagestring($im, 10, 0, $i*12, $t[$i], $textcolor);

Va mettre une ligne ($t[$i]) de ton texte dans l'image, et bouger verticalement en fonction de $i.

	$i++;
}

Finalement on boucle la boucle :)

J'espère que tu as compris quelque chose, car j'ai du mal parfois à expliquer ce queje veux faire (même si le code devrait se suffir à lui même).

Ce n'est rien de très sofistiqué ni de très compliqué. L'astuce réside dans le fait qu'on découpe le texte en ligne et que l'on joue sur la position verticale de chaque ligne.

Mais pour ta signature, je pense que c'est inutile, étant donné que tu n'a que 4 lignes à afficher. Mon algo est donc inutile. A ta place je ne m'embetterai pas avec ça et ferait dans le simple.

Lien vers le commentaire
Partager sur d’autres sites

Les articles étaient uniquement a titre d'exemple, mon but est enfaite de faire une bdd des scores 3dmark06 et 05 des inpactiens dans cartes graphiques/vidéo :iloveyou:

Mais comme l'auteur du topic n'as aucune connaissance en php ou html, et qu'il se fait chier a mettre ses scores a jour dans word, de faire un screen et de l'envoyer sur un ftp, je chercher à lui simplifier la tache :)

Merci encore pour ton aide, avec cette dernière explication je vais pouvoir m'en sortir !

Edit : Je confirme, ca fonctionne comme je le voulais ! Merci (et oui on n'en fait jamais trop dans la vie :francais:) !

Lien vers le commentaire
Partager sur d’autres sites

Ok, merci pour le conseil, mais ca sera sur un serv free donc ...

Enfin si c'est vraiment trop lent je pourrais toujours le modifier !

Il vaut quand même mieux la mettre en 'dur'.

Ensuite, tu peux demander à ton script de vérifier si les valeurs ont changé depuis la dernière fois où l'image a été générée. Si oui, tu la régénères, sinon tu ne touches à rien... Ton serveur (et le remps d'accès à l'image) vont y gagner pas mal

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Ouais, je suis d'accord avec playstation.2.fg, c'est pas des plus lisibles... :D

Je crois qu'on peut définir à partir de quelles coordonnés x,y un texte doit commencer! En te servant de ca, tu dois pouvoir décaler les colonnes...

ex:

colonne1 commence à x=1

colonne2 commence à x=75

colonne2 commence à x=150

...

Et ainsi tu auras un bien meilleur alignement vertical (le coup des couleurs alternantes est aussi un plus)

Lien vers le commentaire
Partager sur d’autres sites

Oui c'est déja beaucoup plus lisible. Manque plus qu'une autre police éventuellement et/ou une alternance de couleur à chaque ligne.

Aussi pour les scores, un alignement à droite serait plus propice à la comparaison. Pour les proco, aussi mettre la ref à gauche, et la fréquence à droite. Ca permet de mieux comparer.

Lien vers le commentaire
Partager sur d’autres sites

Donc au pire faudrais rajouter un champ dans la bdd pour la marque de la carte graphique ...

Je vais déjà faire changer la couleur de la ligne en fonction des cartes en SLi et crossfire, et pour le reste on verra. Je vais déjà essayer de trouver le temps de faire ca ...

Merci pour ton aide :)

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé de faire le changement de couleur de la ligne en fonction du SLi ou du Crossfire mais ca n'a rien donné ...

Tu vas encore me dire c'est tout bete et me sortir la solution en 2 lignes mais je débute ^^ :dd:

Dit moi ce qui vas pas ca sera plus simple :)

<?php

header("Content-type: image/gif");

include('connect.php');

$req = mysql_query('SELECT * FROM 3dmark ORDER BY score DESC');
$res = mysql_num_rows($req);
$hauteur = $res * 15 + 20;
$largeur = 800;


$im = ImageCreateTrueColor ($largeur, $hauteur) or die ("Erreur lors de la création de l'image");
$color1 = imagecolorallocate($im, 0, 0, 100);
$color2 = imagecolorallocate($im, 200, 200, 200);
$color3 = imagecolorallocate($im, 230, 230, 230);
$color4 = imagecolorallocate($im, 255, 0, 0);
$color5 = imagecolorallocate($im, 0, 0, 0);
$px	= (imagesx($im) - 7.5 * strlen($string)) / 2;
$zyzy = "Powered by ZyriK";



while($rep = mysql_fetch_object($req)) {
$string .= "".stripslashes($rep->pseudo)."
";
$string1 .= "".stripslashes($rep->score)."
";
$string2 .= "".stripslashes($rep->cpu)."
";
$string3 .= "".stripslashes($rep->gpu)."
";
$string4 .= "".stripslashes($rep->mgpu)."
";

};

if ($string4 == "SLI") {
$color = imagecolorallocate($im, 0, 255, 0);
} elseif ($name == "Crossfire") {
$color = imagecolorallocate($im, 255, 0, 0);
} else {
$color = imagecolorallocate($im, 0, 0, 0);
}

mysql_close($base);


ImageFilledRectangle ($im, 0, 0, $largeur, $hauteur, $color2);
ImageFilledRectangle ($im, 145, 0, 245, $hauteur, $color3);
ImageFilledRectangle ($im, 495, 0, 695, $hauteur, $color3);
ImageRectangle ($im, 0, 0, $largeur-1, $hauteur-1, $color5);

$t = explode("\n", $string);
$i = 0;
$t1 = explode("\n", $string1);
$i1 = 0;
$t2 = explode("\n", $string2);
$i2 = 0;
$t3 = explode("\n", $string3);
$i3 = 0;
$t4 = explode("\n", $string4);
$i4 = 0;

while ($i < sizeof($t)) {
imagestring($im, 4, 5, $i*15, $t[$i], $color);
$i++;
}
while ($i1 < sizeof($t1)) {
imagestring($im, 5, 150, $i1*15, $t1[$i1], $color);
$i1++;
}
while ($i2 < sizeof($t2)) {
imagestring($im, 4, 250, $i2*15, $t2[$i2], $color);
$i2++;
}
while ($i3 < sizeof($t3)) {
imagestring($im, 4, 500, $i3*15, $t3[$i3], $color);
$i3++;
}
while ($i4 < sizeof($t4)) {
imagestring($im, 4, 700, $i4*15, $t4[$i4], $color);
$i4++;
}

imagestring($im, 1, 360, $hauteur - 10, $zyzy, $color5);

imagegif($im);
imagedestroy($im);

?>

Lien vers le commentaire
Partager sur d’autres sites

Déja dans cette partie de code

if ($string4 == "SLI") {
$color = imagecolorallocate($im, 0, 255, 0);
} elseif ($name == "Crossfire") {
$color = imagecolorallocate($im, 255, 0, 0);
} else {
$color = imagecolorallocate($im, 0, 0, 0);
}

tu ne teste pas 2x la variable $string4 (eh oui faut pas faire un simple copier coller).

De plus, à la manière dont tu créé la variable $string4, ça ne risquera pas de marcher (et de te donner toujours du noir)

$string4 .= "".stripslashes($rep->mgpu)."
";

étant donné que tu saute une ligne :

"SLI" != "SLI\n"

Je te conseille de faire le choix de la couleur une fois que tu serras dans ta boucle.

Ton code n'est non plus pas très propre : pourquoi ne pas directement créer le array ($t1, $t2, etc...) à partir de ta requette MySQL ? Ton script reste encore largement améliorable (et ceci pour toutes les parties de ton code), en mettant par exemple un seul tableau global (au lieu de passer ici par 5 arrays), et de faire un seul while à la fin (voir même directement remplir ton image lors de ton mysql_fetch).

Un petit truc quand tu programmes des trucs dont tu n'es pas sur du résultat : fait des echo au milieu du prog, pour en suivre le déroulement (par contre pense à enlever le header alors). Avec le temps et la pratique tu n'en auras plus besoin parce que tu seras sur de ce que tu programmes.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...