Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/03/2006, 21h40   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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 :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2006, 21h55   #2
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
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>.
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2006, 22h05   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
euh...merci...mais tu peux préciser ta pensée ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2006, 22h59   #4
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
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 :

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

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 :

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

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.
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 00h57   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 10h54   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 12h26   #7
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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
marche pas...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 12h29   #8
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
Tu dois passer ton texte en paramètre avec url_encode() !
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h23   #9
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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 :
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 :
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...!
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h34   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 12h24   #11
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 15h31   #12
Invité régulier
 
Inscription : juillet 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 17
Points : 5
Points : 5
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 :
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 :
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.
Zobi-wane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 15h41   #13
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
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.
__________________
Consultant idéaliste.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 17h28   #14
Invité régulier
 
Inscription : juillet 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 17
Points : 5
Points : 5
Sauf que si je mets le chemin en paramètre on peut le voir avec propriété de l'image
Zobi-wane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2006, 17h37   #15
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
@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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h10.


 
 
 
 
Partenaires

Hébergement Web