IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] Mon image affiche des caractères étranges


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut [ImageMagick] Mon image affiche des caractères étranges
    Bonjour à tous,

    Je souhaite écrire un texte sur des bannières vierges situées dans un dossier...

    Problème, l'mage retournée est une suite incompréhensible de caractères, bref tout sauf une image...
    Si quelqu'un sait...
    Voici la fonction qui parcourt le dossier (elle fonctionne puisque je peux faire un echo des images)...Je précise que tout se passe en local sur EasyPhp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    header("Content-Type: image/png"); 
    include("../fonctions.php");
    $texte = $_GET["texte"];
    $chemin = "bannieres";
    $affiche_ban = "";
     
    $Picture_List = Picture_List_Ban ($chemin);
    for ($i = 0; $i < count($Picture_List); $i++)
        {
        $Picturename = $Picture_List[$i];
     
    		if(eregi("\.(JPG|jpeg|jpg|gif|bmp|png)$", $Picturename))
    		{
                                    $image = ban_png($chemin."/".$Picturename, $texte);
    		$affiche_ban .= "<p align=\"center\">".$image."</p>";
    	  	}
     
    }
    echo $affiche_ban;
    ...et la fonction elle même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function ban_png($png, $texte){
    $png = imagecreatefrompng($png);
    $largeur = 468;
    $hauteur = 60;
    $taille = 5;
    $noir  = imagecolorallocate($png, 0, 0, 0);
    imagestring($png, $taille, ($largeur-imagefontwidth($taille)*strlen("$texte"))/2, 0, $texte, $noir);
    imagepng($png);
    }
    et ça donne...des hiéroglyphes !
    Merci de votre aide.

  2. #2
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Il faut que tu fasses autrement, sépares le traitement de l'image dans un fichier distinct que tu appelles dans une boucle avec la balise <img>.

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    euh...merci...mais tu peux préciser ta pensée ?

  4. #4
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Il te faut un fichier qui va être appelé dans une boucle avec la balise <img> avec des paramètres comme le nom de l'image et le texte, ce fichier va renvoyer une image avec le bon header à chaque itération.

    Ce devrait ressembler à un truc comme ça :

    <?php
    &#160;&#160;&#160;&#160;$Picture_List&#160;
    =&#160;Picture_List_Ban&#160;(&#160;$chemin&#160;)&#160;;
    &#160;&#160;&#160;&#160;foreach&#160;(&#160;
    $Picture_List&#160;as&#160;$value&#160;)
    &#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(&#160;
    getimagesize&#160;(&#160;$value&#160;)&#160
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $affiche_ban&#160;.=&#160;'<img&#160;src=mon_fichier_image.php?img='&#160;.$value&#160;.&#160;'&texte='&#160;.&#160;$_GET['texte']&#160;.&#160;'>'&#160;;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    &#160;&#160;&#160;&#160;}&#160;
    ?>

    Phpsyntaxcolor powered by decabodi.com
    Et dans mon_fichier_image.php tu créer la bannière avec l'image d'origine et le texte un peu comme cela :

    <?php
    &#160;&#160;&#160;&#160;header&#160;
    (&#160;'Content-Type:&#160;image/png'&#160;)&#160;;
    &#160;&#160;&#160;&#160;
    $texte&#160;=&#160;urldecode&#160;(&#160;$_GET['texte']&#160&#160;;
    &#160;&#160;&#160;&#160;
    $png&#160;=&#160;imagecreatefrompng&#160;(&#160;$_GET['img']&#160&#160;;
    &#160;&#160;&#160;&#160;
    $largeur&#160;=&#160;468&#160;;
    &#160;&#160;&#160;&#160;
    $hauteur&#160;=&#160;60&#160;;
    &#160;&#160;&#160;&#160;
    $taille&#160;=&#160;5&#160;;
    &#160;&#160;&#160;&#160;
    $noir&#160;&#160;=&#160;imagecolorallocate&#160;(&#160;$png&#160;,&#160;0&#160;,&#160;0&#160;,&#160;0&#160;)&#160;;
    &#160;&#160;&#160;&#160;
    imagestring&#160;(&#160;$png&#160;,&#160;$taille&#160;,&#160;(&#160;$largeur&#160;-&#160;imagefontwidth&#160;(&#160;$taille&#160;)&#160;*&#160;strlen&#160;(&#160;$texte&#160;)&#160&#160;/&#160;2&#160;,&#160;0&#160;,&#160;$texte&#160;,&#160;$noir&#160;)&#160;;
    &#160;&#160;&#160;&#160;
    imagepng&#160;(&#160;$png&#160;)&#160;;&#160;
    ?>

    Phpsyntaxcolor powered by decabodi.com
    Au passage puisque Picture_List_Ban semble te retourner un array parses-le avec foreach, et j'ai utilisé getimagesize pour déterminer si le fichier est une image ou non.

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Waowww ! chapeau, mec ! je vais tester ça de suite ! Je crois que ton idée m'ouvre de nouvelles perspectives...
    Je te tiens au jus.
    Merci et bonne nuit !

  6. #6
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour !

    Bien testé...les images s'affichent OK, le texte également...sauf un truc bizarre: les espaces ne sont pas lus et si je mets une phrase, seul le premier mot s'affiche...
    Je vais creuser du côté de la fonction imagestring.
    Si t'as une idée...

  7. #7
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    j'en suis maintenant à la fonction imagettftext qui offre plus de possibilité, notamment au niveau des polices...reste que mon problème d'espace subsiste...J'ai également regardé du côté des caractères ASCII et crée une fonction pour remplacer espace par &#32;
    marche pas...

  8. #8
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Tu dois passer ton texte en paramètre avec url_encode() !

  9. #9
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Désespérant...
    Je m'aperçois que mon image et le texte qui va avec se créent parfaitement lorsque je mets les params de la fonction en dur dans le script comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    imagettftext($png, 30, 0, 120, 40, $gris, $font, "TEST");
    //(sachant que $font et $gris sont définis en dur sur la page)
    Par contre plus rien ne va lorsque les params sont passés par la méthode GET ! et je ne comprends pas pourquoi. Le texte est bien urlencode() avant...Voici le bout de script qui passe les variables à la page affiche_image.php qui contient les fonctions de créa image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $texte1 = urlencode($_POST["texte1"]);
    $texte2 = urlencode($_POST["texte2"]);
    $autres_vars = $_POST["autres_vars"];...................
    echo "<p><img src='affiche_image.php?img=".$chemin."/".$ban."&texte1=".$texte1."&texte2=".$texte2."&coul_T1=".$coul_T1."&coul_T2=".$coul_T2."
    &ombrage=".$ombrage."&police_T1=".$police_T1."&police_T2=".$police_T2."&taille_T1=".$taille_T1."&taille_T2=".$taille_T2."
    &X1=".$X1."&Y1=".$Y1."&X2=".$X2."&Y2=".$Y2."'></p>";
    et dans affiche_image.php...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $texte1 = urldecode($_GET["texte1"]);
    $texte2 = urldecode($_GET["texte2"]);
    $vars = $_GET["vars"]...........//je récup tout
    et la fonction (qui ne fonctionne pas...)
    imagettftext($png, $taille_T1, 0, $X1, $Y1, $couleur_T1, $font_T1, $texte1);
    imagettftext($png, $taille_T2, 0, $X2, $Y2, $couleur_T2, $font_T2, $texte2);
    est ce que la chaine de vars est trop longue pour la méthode GET ?
    y-a-t-il un traitement spécial à faire aux variables ?

    Je nage...!

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Affiche tes valeurs dans le script de création d'image pour être certain de les récupérer correctement et fais mourir le script pour éviter d'avoir le code de l'image à la suite.
    Tu as dû faire une erreur bête quelque part.

  11. #11
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Merci à tous et à Kirkis...!

    et ouais, le truc bête: le "#" ne passe pas dans l'url et la méthode GET. Donc toutes les variables qui suivent ne sont pas lues.
    CQFD !

    Et vraiment bravo pour la qualité des intervenants de ce forum.
    Bonne journée.

  12. #12
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    Bonjour,

    je fais même type de manipulation pour affihcer mes photos (voir un ancien post)
    par contre comme il s'agit de données privée je ne veux pas que l'emplacement de la photo soit visible. Pour cela j'ai pensé utilisé une variable de session pour faire passer l'emplacement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    une boucle ....
     
    $_SESSION["path_$i"]=$chemin;
    echo "<img  src=\"image.php?f=$i\">";

    et dans mon autre page je récupère le chemin



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?
    header('Content-Type: image/jpeg');
    session_start();
    $i=$_GET['f'];
    $temp2=$_SESSION["path_$i"];
    $im = imagecreatefromjpeg("$temp2");         
    Imagejpeg($im);
    imagedestroy($im);
    ?>
    mais ca ne fonctionne pas. C'est comme si la variable de SESSIOn ne contenait rien.

  13. #13
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Avec cet entête : header('Content-Type: image/jpeg'); ton fichier devient une image, et il ne me semble pas qu'il est possible d'initialiser une session dans une image.

    Passes la variable en paramètre.

  14. #14
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 17
    Par défaut
    Sauf que si je mets le chemin en paramètre on peut le voir avec propriété de l'image

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    @renaud26 : Tel quel, le dièse est un caractère utilisé pour l'ancrage en HTML, c'est pour cette raison que tu ne peux pas l'envoyer comme valeur. Utilise urlencode() et urldecode().

    @macbook : Je n'en suis pas aussi certain que toi. Tant que tu n'envoies pas d'info au navigateur, tu peux utiliser session_start(), c'est la seule restriction.

    @Zobi-one : Initialise ta session avant d'envoyer le header d'image, comme c'est conseillé partout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GD2] affiche des caractères à la place de l'image
    Par caroen dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 07/11/2008, 12h48
  2. Afficher des caractères spéciaux en ISO-8859-1
    Par markoBasa dans le forum iReport
    Réponses: 2
    Dernier message: 24/09/2008, 12h21
  3. [BOXI R2] : Impossible d'afficher des caractères russes
    Par alexandre_71 dans le forum Administration-Migration
    Réponses: 1
    Dernier message: 24/09/2008, 12h03
  4. JLabel - afficher des caractères Unicode asiatiques
    Par Nicolas_75 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/02/2007, 13h38
  5. Afficher des caractères et leur code ASCII
    Par hamada_10 dans le forum Pascal
    Réponses: 8
    Dernier message: 26/12/2006, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo