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
merci j'ai trouvé mon erreur, ça venait de ma requête !! mauvaise variable.
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.
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
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é
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.
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;
}