Imagestring en PHP

Bonjour,
je ne sais pas si qqun pourra me répondre sur le code PHP suivant qui affiche bien l'image carte_drome_villes.jpg
mais qui bloque sur la fonction imagestring
en renvoyant l'erreur suivante " Warning: imagestring() expects parameter 1 to be resource, string given in ...."

$Wpoint = 5 ;
$Hpoint = 5 ;
$Nocom = 15 ;
$Nomcom = "ARTHEMONAY" ;
$Xcom = 162 ;
$Ycom = 120 ;
$Left = 700 ;
$Top = 20 ;
$Width = 400 ;
$Height = 600 ;

$Xpoint = $Left + $Xcom;
$Ypoint = $Top + $Ycom ;

$carte = 'carte_drome_villes.jpg';
ECHO '<IMG STYLE="position:absolute; TOP: ' . $Top . 'px; Left:'. $Left. 'px ; WIDTH: '. $Width .' px; HEIGHT: '. $Height.' px; border:3px solid;" src="' . $carte . '"/>';

$ima = imagecreatetruecolor(120,20)
or die('Impossible de crée un flux d\'image GD');

$text_color = imagecolorallocate ($ima, 70, 70, 70);

imagestring ($carte, 3, 200, 140, $Nomcom, $text_color);

15 réponses

  1. Bonjour,

    Le premier paramètre de imagestring est la ressource de l'image donc $ima et nom pas le nom du fichier que vous voulez créer

    $ima = imagecreatetruecolor(120,20)
    or die('Impossible de crée un flux d\'image GD');
    
    $text_color = imagecolorallocate ($ima, 70, 70, 70);
    
    imagestring ($ima, 3, 200, 140, $Nomcom, $text_color); 
    


    Cordialement
    0
    1. re
      merci de la réponse rapide
      maintenant il n'y a plus d'erreur .... l'image "carte_drome_villes.jpg" s'affiche bien
      mais pas la chaine $Nomcom
      0
      1. Votre image fait 120x120 pixels
        Vous affichez le texte en X=200 et Y=140
        Donc pas dans l'image

        essayez

        imagestring ($ima, 3, 20, 14, $Nomcom, $text_color);

        Ca devrait afficher quelque chose
        0
        1. non ça ne change rien
          l'image "carte_drome_villes.jpg" fait 400 X 600 px
          $ima fait 120 X 20
          et tjrs pas d'affichage de la chaine $Nomcom
          0
          1. mais je suis débutant en php donc un oubli ?
            l'image ""carte_drome_villes.jpg" s'affiche correctement
            et je voudrais afficher par dessus la chaine $Nomcom a une position bien précise

            est ce la bonne méthode ?
            0
            1. Non...

              L'image sur laquelle vous dessinez c'est $ima, pas une autre

              Si vous voulez dessiner sur votre fichier "carte_drome_villes.jpg"

              il va falloir faire ceci

              $img = resource imagecreatefromjpeg ("carte_drome_villes.jpg");
              $text_color = imagecolorallocate ($img, 70, 70, 70);
              imagestring ($img, 3, 200, 140, $Nomcom, $text_color);
              imagejpeg($img);

              on ne travaille plus sur $ima
              0
              1. ça m'affiche un plein écran en chinois (ou plutot en japonais ... c'est à la mode !!)
                0
                1. Oui il faut préciser le mime type dans un header auparavant
                  header("Content-type: image/png");
                  sans vouloir abuser, ce serait bien que vous regardiez un peu avant ici https://www.php.net/manual/fr/ref.image.php
                  0
              2. non tu n'abuses pas
                mais même si je suis débutant en programmation PHP .... je ne suis pas un "novice" quand même
                et je te rassure ... avant de poster ... je suis allé à la pêche aux infos
                et si je suis là ... c'est que je seche !!!
                mais c'est vrai que j'oublie certainement quelque chose d'évident pour toi

                donc comme tu veux !!!
                0
                1. Ce code là fonctionne à condition d'avoir une image carte_drome_villes.jpg sur le même répertoire que le fichier PHP

                  <?php
                  header("Content-type: image/jpg");
                  $img = imagecreatefromjpeg ("carte_drome_villes.jpg");
                  $text_color = imagecolorallocate ($img, 70, 70, 70);
                  imagestring ($img, 3, 200, 140, 'texte', $text_color);
                  imagejpeg($img);
                  ?>
                  0
                  1. OK
                    grand merci
                    ça marche
                    une autre question (sans vouloir abuser !! )
                    à partir d'une carte mappée je voudrais que chaque zone de la carte amene vers un même lien mais avec une variable différente
                    quelle est la meilleure solution ?
                    0
                    1. le lien ne fonctionne pas apparemment
                      0
                      1. Ce n'était qu'un exemple de syntaxe pour le lien, pas un lien réel
                        0
                    2. Bonjour
                      et désolé pour la question précédente !!! j'avais pas compris
                      mais Merci pour la réponse ... ça fonctionne tres bien

                      Par contre, comme j'ai plusieurs cartes mappées différentes + un nombre de zones différentes pour chaque carte + des coordonnées différentes (évidemment) + une variable à transmettre différente ... j'ai mis toutes ces valeurs en variables (récupérées dans un BDD Mysql) et je voulais faire avec une boucle FOR NEXT la déclaration des AREA SHAPE .... et apparemment ça ne fonctionne pas .... seule la dernière zone de la boucle est prise en compte !
                      Est ce que ce n'est pas possible ? ou est ce que j'oublie qq chose ?
                      0
                      1. aucune idée
                        il doit y avoir une coquille dans votre code quelque part
                        0
                    3. rectification .... seule le PREMIER AREA SHAPEest pris en compte
                      0
                      1. dsl
                        ça fonctionne bien !
                        j'avais placé le MAP NAME = dans la boucle au lieu de le placer avant la boucle !
                        donc sujet clos
                        0