Récupération d'une valeur dans une image dynamique en php

Eléphanteau du PHP | 18 Messages

26 janv. 2006, 14:25

Bonjour tout le monde !

Je voudrais créer une barre dynamique qui évolue en fonction du pourcentage trouvée dans la page result.php.

J'ai donc deux fichiers : result.php et image.php (dessine la barre)...

D'après ce que j'ai trouvé sur php.net, il est possible de faire ça :
<?php
header("Content-type: image/png");
$im = @imagecreate(128, 16) or die("Cannot Initialize new GD image stream");
$bc = imagecolorallocate($im, 0, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 1, 4, 4,  $t, $tc);
imagepng($im);
imagedestroy($im);
?>
en Gros on dessine un rectangle ou la valeur $t du texte est inconnue.

Lorsqu'on appelle l'image, on peut alors attribuer une valeur à $t de la façon suivante :
<img src="http://www.yourdomain.com/stuff/cool_image.php?t=Text">

cela affichera un rectangle bleu avec comme texte "Text"

J'essaie de faire de même mais cela ne marche pas avec mon script.


image.php
<?php
header("Content-type: image/png");
$im = @imagecreate(128, 16) or die("Cannot Initialize new GD image stream");
$bc = imagecolorallocate($im, 0, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 1, 4, 4,  $t, $tc);
imagepng($im);
imagedestroy($im);
?>
result.php
<?php 
include( "mysql.inc.php" ); 
$requete  = "SELECT *, MATCH (fr) AGAINST ('pluie') AS score ". 
            "FROM japfr ". 
            "WHERE MATCH (fr) AGAINST('pluie' IN BOOLEAN MODE) ". 
            "ORDER BY score DESC"; 
$execution  = mysql_query( $requete,  $connection ); 
$total = mysql_num_rows( $execution ) ; 

if ($total != 0) 
{ 
    $i = 0; 
    while( $un_mot = mysql_fetch_array( $execution ) ) 
    { 
        $valeur = round ($un_mot["score"],2);  
        /* Si on est au premier tour, on calcule le coefficient, sinon on reconduit celui déterminé au premier tour. */ 
        $coeff = ($i == 0) ? round(100/$valeur) : $coeff; 
        /* On calcule le pourcentage correpondant à la valeur sauf au premier tour où la plus grande valeur est obligatoirement 100 */ 
        $pourcent = ($i == 0) ? 100 : $valeur * $coeff; 
// c'est dans cet echo que le problème se trouve
        echo "<img src=\"modules/dico/image.php?t=hello\">". $pourcent ."% ". $un_mot["fr"] ."  ". $un_mot["jap"]."<br/>"; 
        $i++; 
    } 
} 
else 
{ 
    echo "pas de traduction"; 
} 
?>
L'image ne s'affiche pas... cela devrait afficher l'image avec pour text "hello"... Je ne comprends pas pourquoi...

Merci d'avance à ceux qui pourront m'aider!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 17:16

Salut,

il faut déjà commencer par récupérer la valeur passée par l'url:
$t=$_GET['t'];

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 18 Messages

26 janv. 2006, 17:51

Et oui ! C'est ça !!

En fait, le script sur php.net était sûrement écrit avant le passage des variables globales à off! et c'est pas le genre de truc que je savais ! On vient de me l'apprendre !
En tout cas merci !!

Du coup,

est-il possible de faire :

$p = $_GET["t"];

Puis

if ($p=100){je change la couleur de la barre}

else if ($p>80 && ^$p < 100) {je mets une autre couleur}

etc ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 18:43

est ce une question ? :-k

sinon eh bien oui c'est possible... tout est réalisable :lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 18 Messages

26 janv. 2006, 23:19

oui, c'est faisable^^

En revanche, j'ai voulu modifier le code de l'image pour insérer des images jpg pour que cela soit un peu plus zoli mais je n'arrive pas à mettre le pourcentage dans l'image avec imagestring... alors que je pouvais lorsque je faisais un imagecreate de base...
<?php
header ("Content-type: image/jpg");
$p=$_GET['t'];// je récupère le pourcentage

$source = imagecreatefromjpeg("fond2.jpg");// j'importe mes 2 images
$destination = imagecreatefromjpeg("fond.jpg"); 

imagecopymerge($destination, $source, 0, 0, 0, 0,  $p/3.4, 9, 80);
imagejpeg($destination);
?>
Si je rajoute :
$couleur_texte = imagecolorallocate($destination, 255, 255, 255); 
imagestring($destination, 0, 0, 0, $p."%", $couleur_texte);
avant imagejpeg($destination), l'image ne s'affiche plus...