[php] probleme d'affichage avec imagecreate

28_seb Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -  
 FloFlo -
Bonjour,

j'ai un problème d'affichage en utilisant imagecreate ou imagecreatetruecolor :

mon code :

$img_handle = ImageCreate (60, 20) or die ("Impossible de créer l\'image");
//Image size (x,y)
$back_color = ImageColorAllocate($img_handle, 255, 0, 0);
//Background color RBG
$txt_color = ImageColorAllocate($img_handle, 45, 23, 76);
//Texte Couleur RBG
ImageString($img_handle, 31, 5, 0, "coucou", $txt_color);
Imagepng($img_handle);

Si je mets ce code (tout seul) dans une page php, il fonctionne.

Si je l'inclu dans une page php ayant un autre code, cela ne fonctionne plus, j'ai cela qui s'affiche :

‰PNG  ��� IHDR���<������ëÍÌj���PLTEÿ��-L ßN���]IDAT™c`ÀÛêêíÀŒÃÌÀŒ ›ä϶l †„ä¶: 6 ÃmÌv @Fâ6fcãà?æÃfËÆs‡€Šoþd°H@-`þ€×~ì��·r"œk]U����IEND®B`‚

J'ai essayé de mettre header("Content-type: image/png"); mais ça ne marche toujours pas.


Merci pour votre solution.
A voir également:

3 réponses

Torkass Messages postés 166 Date d'inscription   Statut Membre Dernière intervention   95
 
Peut-on avoir le code contenu dans la page en question ?
0
28_seb Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonjour,

Mon code est un peu long, il n'est pas encore optimale quelque truc a corriger mais ca ne gene pas le code.
Il permet de uploader des fichiers vers mon serveur, tout simple, j'essaie de mettre une capcha mais ca plante.

Merci

<?
session_start();
?>
<HTML>
<HEAD>
<Link rel="STYLESHEET" type="text/css" href="./cadre.css">
<TITLE>Retouche d'image</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" class=texte>
<table cellpadding=0 cellspacing=0 class=tablo width=100%>
<tr>
<td class=tablo-titre><span class=texte-titre>Redimension d'une image</span></td>
</tr>
<tr>
<td align="center">
<ul style="list-style-type:none;margin-left:0;">
<BR>
<DIV ALIGN="CENTER">
<TABLE BORDER="0" CELLPADDING="2" CELLSPACING="0" class="tabletour" WIDTH="600">
<TR BGCOLOR="#005bc2"><TD class="txtcolonnebleue" COLSPAN="2"> A quoi sert cet outil ?</TD></TR>
<TR><TD VALIGN="TOP"> 1.</TD><TD VALIGN="TOP"><B>redimensionner vos photos</B> afin qu'elles soient d'une taille raisonnable pour une plus grande rapidité d'affichage, et pour une meilleure visibilité.</TD></TR>
<TR><TD VALIGN="TOP"> 2.</TD><TD VALIGN="TOP">Le cas échéant, <B>à faire pivoter vos photos</B> si elles ne sont pas dans le bon sens.<br></TD></TR>
<TR><TD VALIGN="TOP"><font color="#FF0000">    NB- </font></TD><TD VALIGN="TOP"><font color="#FF0000"><B>Les formats acceptés sont : jpg, jpeg et gif, votre image initiale doit avoir un poids inférieur à 2 Mo.</B></font></TD></TR>
<TR BGCOLOR="#005bc2"><TD class="txtcolonnebleue" COLSPAN="2"> Le principe</TD></TR>
<TR><TD VALIGN="TOP" COLSPAN="2">Via le formulaire ci-dessous, vous envoyez votre photo sur notre serveur. Si elle est trop grande, elle est automatiquement redimensionnée.<BR><br>Si nécessaire, vous la faites pivoter. Il ne vous reste plus qu'à cliquer (clic droit) sur la photo pour l'enregistrer sur votre disque dur afin de pouvoir la télécharger ensuite.</TD></TR>
</TABLE>
<BR>
<?php
$string = "abcdefghijklmnopqrstuvwxyz0123456789AZERTYUIOPQSDFGHJKLMWXCVBN";
for($i=0;$i<6;$i++){
$pos = rand(0,62);
$str .= $string{$pos};
}

$img_handle = imagecreatetruecolor (60, 20) or die ("Impossible de créer l\'image");
//Image size (x,y)
$back_color = ImageColorAllocate($img_handle, 255, 0, 0);
//Background color RBG
$txt_color = ImageColorAllocate($img_handle, 45, 23, 76);
//Texte Couleur RBG
ImageString($img_handle, 31, 5, 0, $str, $txt_color);
Imagepng($img_handle);
?>

<BR>
<?php
if($_GET['id']==90) $_SESSION['operation']= 90;
if($_GET['id']==270) $_SESSION['operation']= 270;
if($_GET['id']==180) $_SESSION['operation']= 180;
if(isset($_SESSION["operation"])){
$ok="ok";
}
//paramètre
$extensions_ok = array('gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG');
$dossier_fic = "./photo/"; // dossier où sont stockées les photos à traiter
$dest_dossier = '????photo/'; // le dossier où les photos sont stockées
$taille_max = 8000000; // en octet

// series de test pour vérifier si le fichier est correct
if((isset($_FILES['photo'])) AND (in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ))
AND ($_FILES['photo']['error'] == 0) AND ($_FILES['photo']['size'] <= $taille_max)){
$ext = substr(strrchr($_FILES['photo']['name'], "."), 1 );
if($ext==jpg) $ext=jpeg;
$ext = substr(strrchr($_FILES['photo']['name'], "."), 1 ); // recupere l'extension du fichier
$ext = strtolower($ext);
$dest_fichier = time().".".$ext; // permet de renommer le fichier
$_SESSION['fic'] = $dest_fichier; //met le nom du fichier dans une session pour pouvoir s'en servir après
// transférer l'image du répertoire temporaire vers un répertoire de destination
$envoi = move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier.$dest_fichier);

if ($envoi) {
$image = $dossier_fic.$dest_fichier;
if (!isset($_GET["operation"])){
$ext = substr(strrchr($_SESSION['fic'], "."), 1 );
$ext = strtolower($ext);
switch ($ext) {
case "jpg":
$chemin = imagecreatefromjpeg($image);
break;
case "jpeg":
$chemin = imagecreatefromjpeg($image);
break;
case "gif":
$chemin = ImageCreateFromgif($image);
break;
case "png":
$chemin = ImageCreateFrompng($image);
break;
}
if (!$chemin) return "Erreur : Lecture impossible de l'image ".$source." !";
// prend la taille de l'image
$dimension=getimagesize($image);
$src_w = $dimension[0];
$src_h = $dimension[1];
// superieur à 500 dans l'exemple
//if($dimension[0]>500){
$dst_w = $_POST['dim']; //480;
// Contraint le rééchantillonage à une largeur fixe
// Maintient le ratio de l'image
$dst_h = round(($dst_w / $src_w) * $src_h);
$nouvelle = ImageCreateTrueColor($dst_w,$dst_h);
if (!$nouvelle) return "Erreur : Buffer non créé : ";
//imagecopyresampled($nouvelle,$chemin,0,0,0,0,$dst_w,$dst_h,$dimension[0],$dimension[1]);
ImageCopyResampled($nouvelle,$chemin,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);

switch ($ext) {
case "jpg":
imagejpeg($nouvelle,$image);
break;
case "jpeg":
imagejpeg($nouvelle,$image);
break;
case "gif":
Imagegif($nouvelle,$image);
break;
case "png":
Imagepng($nouvelle,$image);
break;
}
imagedestroy ($chemin); <---- c'est ici que ça plante, ça affiche les caractère de mon premier message
}
}
else return "une erreur est survenue";
}// fin des tests
else if ($_FILES['photo']['error']) { // vérifie si il y a eu une erreur pendant le transfert
switch ($_FILES['photo']['error']){
case 1: // UPLOAD_ERR_INI_SIZE
echo "Le fichier dépasse la limite autorisée par le serveur !";
break;
case 2: // UPLOAD_ERR_FORM_SIZE
echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
break;
case 3: // UPLOAD_ERR_PARTIAL
echo "L'envoi du fichier a été interrompu pendant le transfert !";
break;
case 4: // UPLOAD_ERR_NO_FILE
echo "Le fichier que vous avez envoyé a une taille nulle !";
break;
}
exit;
}

if (isset($ok)) {
$image = $dossier_fic.$_SESSION['fic'];
$ext = substr(strrchr($_SESSION['fic'], "."), 1 );
$ext = strtolower($ext);
switch ($ext) {
case "jpg":
$im = imagecreatefromjpeg($image);
break;
case "jpeg":
$im = imagecreatefromjpeg($image);
break;
case "gif":
$im = ImageCreateFromgif($image);
break;
case "png":
$im = ImageCreateFrompng($image);
break;
}
//$chemin = imagecreatefromjpeg($image);
//$im = imagecreatefromjpeg($image);
//$pixels = getimagesize($image);
switch ($_SESSION["operation"]) {
case "90":
$im = ImageRotate($im, 90, 0);
break;
case "270":
$im = ImageRotate($im, -90, 0);
break;
case "180":
$im = ImageRotate($im, 180, 0);
break;
}
switch ($ext) {
case "jpg":
imagejpeg($im,$image);
break;
case "jpeg":
imagejpeg($im,$image);
break;
case "gif":
Imagegif($im,$image);
break;
case "png":
Imagepng($im,$image);
break;
}
//imagejpeg($im,$image);
imagedestroy ($im);
}
if ((isset($_FILES['photo'])) OR (isset($ok))) {
if (in_array( substr(strrchr($_SESSION['fic'], '.'), 1), $extensions_ok )){
echo '<BR>La photo a été redimensionnée automatiquement.';
echo '<BR><b>Enregistrer l\'image :</b> Clic droit sur l\'image et choisissez "Enregistrer l\'image sous"<br><br>';
echo "<IMG SRC=$image?rand=".time().">";

echo "<BR><BR><BR>Si nécessaire, vous pouvez faire pivoter votre photo. <BR>";
echo "cliquez alors sur les symboles suivants. <BR>";
echo "<A HREF=\"?id=90\"><IMG SRC=\"img/gauche.gif\" WIDTH=\"60\" HEIGHT=\"60\" BORDER=\"0\" ALT=\"Pivoter l'image de 90 degrés vers la gauche.\"></A>";
echo "  ";
echo "<A HREF=\"?id=270\"><IMG SRC=\"img/droite.gif\" WIDTH=\"60\" HEIGHT=\"60\" BORDER=\"0\" ALT=\"Pivoter l'image de 90 degrés vers la droite.\"></A>";
echo "  ";
echo "<A HREF=\"?id=180\"><IMG SRC=\"img/inverse.gif\" WIDTH=\"60\" HEIGHT=\"60\" BORDER=\"0\" ALT=\"Pivoter l'image de 180 degrés.\"></A>";
echo " <BR><BR>";
echo "<span class=texte-titre><a class=\"lien\" href=\"upload.php\">Traiter une autre photo</a></span><BR><br>";
}
}
session_unregister('operation');

if (!isset($_POST['MAX_FILE_SIZE']) AND (!isset($ok))){
echo "
<FORM ACTION=\"upload.php\" METHOD=\"POST\" NAME=\"FORM_RETOUCHE\" ENCTYPE=\"MULTIPART/FORM-DATA\">
<INPUT TYPE=\"HIDDEN\" name=\"MAX_FILE_SIZE\" value=\"8000000\">
Choisissez une dimension :
<br>480x360pi : <INPUT type=radio name=\"dim\" value=\"480\" checked>
<br>600x450pi : <INPUT type=radio name=\"dim\" value=\"600\"><br><br>
<INPUT TYPE=\"FILE\" NAME=\"photo\">
<INPUT TYPE=\"SUBMIT\" VALUE=\"Envoyer la photo à traiter\" Onclick=\"this.value='Traitement en cours !!! Patientez SVP'\">
<BR><BR>
Note : l'image qui se trouve sur votre disque dur ne sera pas modifiée.
</FORM>
</DIV>
<ul>";
}
?>
</td>
</tr>
</table>
</BODY>
</HTML>
0
28_seb Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   11
 
Bonjour,

Quelqu'un aurait une idée, car je suis bloqué.

Merci beaucoup.
0
FloFlo
 
C'est un peu tard, mais cela servira aux suivants...

Il faut insérer la balise image dans ton code en donnant pour source le chemin du fichier PHP qui génère l'image :
<img src="chemin_de_ton_fichier.php" />
0