Création de miniature à l'upload

Par macinsteph, il y a 8 ans


Bonjour,

J'ai un petit soucis avec le tuto de Grafikart sur l'upload d'une image et la création d'une miniature.
Voilà mon code :

$upload_Dir = '../img/produits/' ; // dossier de sauvegarde de la photo principale $upload_Min = '../img/min/' ; // dossier de sauvegarde de la miniature if (isset($_POST['ajouter'])) { $name = $_POST['name']; $description = $_POST['description']; $sex = $_POST['sex']; $priceJ = $_POST['priceJ']; $priceA = $_POST['priceA']; require'imgClass.php'; // appel de la class qui gère la génération des miniatures $imgName = $_FILES['image']['name']; $imgTmp = $_FILES['image']['tmp_name']; $imgSize = $_FILES['image']['size']; if (empty($name)) { $error = 'Renseigner le nom du produit'; }elseif (empty($description)) { $error = 'mettre une description du produit'; }elseif (empty($sex)) { $error = 'Indiquer une catégorie'; }elseif (empty($priceJ)) { $error = 'Renseigner un prix enfant'; }elseif (empty($priceA)) { $error = 'Renseigner un prix Adulte'; }elseif (empty($imgName)) { $error = 'Choisir une photo'; }else{ // récupérer l'extension de l'image $imgExt = strtolower(pathinfo($imgName, PATHINFO_EXTENSION)); // Extension autorisé $allowExt = array('jpeg', 'jpg', 'png', 'gif'); // nom de l'image $userPic = $_FILES['image']['name']; // nom de l'image principale // vérifier validité de l'image if (in_array($imgExt, $allowExt)) { if ($imgSize < 5000000) { move_uploaded_file($imgTmp, $upload_Dir.$userPic); Img::creerMin($upload_Dir.$userPic,$upload_Min,$userPic,120,150); // création de la miniature }else{ $error = 'Image trop lourde'; } }else{ $error = 'Merci de choisir une photo valide'; } }

Je ne comprends pas d'ou vient le problème ?

merci

8 réponses

SLK, il y a 8 ans

Salut,

dis nous au moins le problème que tu rencontres.

macinsteph, il y a 8 ans

que la miniature n'est pas créée, oui désolé

SLK, il y a 8 ans

Je n'ai pas suivi le tuto,
La classe "ImgClass" c'est une classe perso c'est ça ?

Tu peux montrer la fonction "CreerMin" ?

En même temps, fais un var_dump des 4 variables en paramètres pour voir.

macinsteph, il y a 8 ans

c'est la class que Grafikart met en téléchargement, ce n'est pas moi qui l'ai créé.
Je l'a met la :

<?php class Img{ static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){ // On supprime l'extension du nom $nom = substr($nom,0,-4); // On récupère les dimensions de l'image $dimension=getimagesize($img); // On cré une image à partir du fichier récup if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); } else if(substr(strtolower($img),-4)==".jpeg"){$image = imagecreatefrompng($img); } else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); } else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); } // L'image ne peut etre redimensionne else{return false; } // Création des miniatures // On cré une image vide de la largeur et hauteur voulue $miniature =imagecreatetruecolor ($mlargeur,$mhauteur); // On va gérer la position et le redimensionnement de la grande image if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;} if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;} if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;} // on modifie l'image crée en y plaçant la grande image redimensionné et décalée imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]); // On sauvegarde le tout imagejpeg($miniature,$chemin."/".$nom.".jpg",90); return true; } } ?>

Aprés le require de la class est bien positionné ?
Et l'appel à la création de la miniature est elle à la bonne place ?
j'ai suivi le tuto de création d'une galerie : Tutoriel PHP - Gestion d'images/Création d'une galerie

brassac, il y a 8 ans

bonsoir, quand tu supprime l'extention tu

$nom = substr($nom,0,-4);

or si tu upload un .jpeg tu as 5 caracteres après le $nom à voir si ça vient de la?
Cordialement
André

ALN Animation, il y a 8 ans

Bonsoir,
Ne faudrait il pas que sur cette ligne :
$allowExt = array('jpeg', 'jpg', 'png', 'gif');
Il n'y a pas des points avant le nom des extentions?
$allowExt = array('.jpeg', '.jpg', '.png', '.gif');
Cordialement.

celionor, il y a 8 ans

J'aurai mis l'extention en paramètre dans la méthode ::creerMin(), et un sytème de condition derrière.

static function creerMin($params, [...,] $extention = null) { $image = self::createImage($extention); if ($image) { ... return true; } return false; } /** * Création d'une nouvelle image * @param $extention string extention de l'image * @return */ static private function createImage($extension) { switch($extention) { case 'jpg': case 'jpeg': $image = imagecreatefromjpeg($img); break; case 'png': $image = imagecreatefrompng($img); break; case 'gif': $image = imagecreatefromgif($img); break; default: return false; break; } return $image; }
macinsteph, il y a 8 ans

merci j'ai trouvé mon erreur, ça venait de ma requête !! mauvaise variable.