Erreur avec le fonction imagecreatefromstrin()

Eléphant du PHP | 121 Messages

26 mars 2009, 20:20

Boujour à tous,

je fais actuellement une code pour reduire la taille de mes photos qui sont stockées dans un dossier.

Voilà mon code.

Code : Tout sélectionner

<?php //le dossier images $chem_img = "./ima"; //On ouvre le dossier images $handle = opendir($chem_img); //On parcoure chaque élément du dossier while ($file = readdir($handle)) { //Si les fichiers sont des images if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file)) { $listef = $file; //On calcule la largeur et la hauteur de l'image aléatoire $size = getimagesize($chem_img."/".$listef); //Largeur maximale de l'image pour la création des miniatures $largeur_maxi = 750; //Si la largeur dépasse la limite autorisée... if ($size[0] > $largeur_maxi) { //...la nouvelle largeur est égale à la limite à ne pas dépasser $width = $largeur_maxi; //La largeur d'origine divisée par la largeur limitée (on obtient un chiffre qui sert à faire la même proportion pour la hauteur) $theight = ($size[0]/$largeur_maxi); //La hauteur originale est divisée par le chiffre obtenu précédemment afin que l'image conserve les mêmes proportions que l'originale (mais en mode vignette) $height = ($size[1]/$theight); } else { //Sinon on garde la taille originale $width = $size[0]; $height = $size[1]; } $im=@imageCreateTrueColor($width,$height)or die ("erreur lors de la création de l'image"); $source=imagecreatefromstring($file); echo $width,"&nbsp;".$height,"<br>"; } } //On ferme le dossier closedir($handle); ?>
Le prob c'est que j'ai un message d'erreur et je ne sais pas pourquoi .
Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in E:\wamp\www\Parapente\teste.php on line 38
Merci à celui qui pourra m'aider.

Eléphant du PHP | 141 Messages

26 mars 2009, 20:31

Affiches la variable $file juste avant de faire le imagecreatefromstring() pour savoir quelle fichier génère cette erreur

Edit : En fait, tu as oublié d'ajouter le chemin du répertoire devant le nom du fichier donc il ne trouve pas l'image. Ensuite, il faut récupérer le contenu du fichier sous forme de chaine de caractère puisque tu utilises la fonction imagecreatefromstring()
$source=imagecreatefromstring(file_get_contents($chem_img."/".$file));

Eléphant du PHP | 121 Messages

26 mars 2009, 21:16

Merci pour ton aide. J'avais pas vu que le chemin était pas juste.

Voilà mon code terminé qui redimentionne mes photos.

Code : Tout sélectionner

<?php //le dossier images $chem_img = "./ima"; //On ouvre le dossier images $handle = opendir($chem_img); //On parcoure chaque élément du dossier while ($file = readdir($handle)) { //Si les fichiers sont des images if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file)) { $listef = $file; //On calcule la largeur et la hauteur de l'image aléatoire $size = getimagesize($chem_img."/".$listef); //Largeur maximale de l'image pour la création des miniatures $largeur_maxi = 750; //Si la largeur dépasse la limite autorisée... if ($size[0] > $largeur_maxi) { //...la nouvelle largeur est égale à la limite à ne pas dépasser $width = $largeur_maxi; //La largeur d'origine divisée par la largeur limitée (on obtient un chiffre qui sert à faire la même proportion pour la hauteur) $theight = ($size[0]/$largeur_maxi); //La hauteur originale est divisée par le chiffre obtenu précédemment afin que l'image conserve les mêmes proportions que l'originale (mais en mode vignette) $height = ($size[1]/$theight); } else { //Sinon on garde la taille originale $width = $size[0]; $height = $size[1]; } // on crée une image vide $im=@imageCreateTrueColor($width,$height)or die ("erreur lors de la création de l'image"); // on lit l'image existante $source=imagecreatefromstring(file_get_contents($chem_img."/".$file)); // Redimensionne l'image imagecopyresampled( $im,$source,0, 0, 0, 0,$width,$height,$size[0],$size[1]); // Enregistre la photo à la nouvelle dimention imageJpeg($im,($chem_img."/".$file)); // Détruit les ressources temporaires crées imagedestroy($im); imagedestroy($source); } } //On ferme le dossier closedir($handle); ?>
Il peut servir à d'autres personnes.

:D