8796 sujets

Développement web côté serveur, CMS

bonjour,
alors voilà j'ai un code qui me permet de créer des miniatures d'images stockés dans un repertoire.
Ce code permet de créer les miniatures en appliquant un ratio afin de les reduire de facon qu'elle ne soit pas deformées.
jusque la tout fonctionne très bien.

Maintenant pour une question de mise en page, je souahiterai ajouter a mon code une hauteur maxi et une largeur maxi pour mes miniatures.
Une miniature d'image aurait donc pour valeur maxi en largeur 173px et en hauteur 130px.

Voici le code que j'utilise actuellemntavec un ratio de 130.
je souhaiterai l'adapter mais pour qu'il gère maintenant la largeur max et hauteur maxi des miniatures.



// on défini notre ratio pour nos miniatures
$ratio = 130;  
// on défini le répertoire qui contient nos images de grande taille  
$dir = '../images/galerie/';  
 
// si aucune image n'est donnée en arguments, on redirige le visiteur vers l'accueil de la galerie  
if (!isset($_GET['f'])) { 
   header('location: references-escaliers-vosges.php'); 
   exit();  
}  
else { 
   // on récupère le nom de fichier à miniaturiser 
   $image = $_GET['f']; 
   // on récupère les infos de cette image 
   $tableau = @getimagesize('../images/galerie/'.$image); 
   // si il ne s'agit pas d'un fichier image, on redirige le visiteur vers l'accueil de la galerie 
   if ($tableau == FALSE) { 
      header('location: references-escaliers-vosges.php'); 
      exit(); 
   } 
   else { 
      // si notre image est de type jpeg 
      if ($tableau[2] == 2) { 
         // on crée une image à partir de notre grande image à l'aide de la librairie GD 
         $src = imagecreatefromjpeg($dir.'/'.$image); 
         // on teste si notre image est de type paysage ou portrait 
         if ($tableau[0] > $tableau[1]) { 
            $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
         } 
         else { 
            $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
         } 
         // on envoie un header au navigateur web du visiteur lui disant que le fichier mini.php va en fait générer une image de type jpeg, soit du type mime image/jpeg. 
         header ("Content-type: image/jpeg"); 
         imagejpeg ($im); 
      } 
      elseif ($tableau[2] == 3) { 
         $src = imagecreatefrompng($dir.'/'.$image); 
         if ($tableau[0] > $tableau[1]) { 
            $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
         } 
         else { 
            $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
         } 
         header ("Content-type: image/png"); 
         imagepng ($im); 
      } 
   }  
}  




Modifié par fabrice88 (02 Aug 2009 - 20:28)
Salut,

pour le principe tu peux te baser sur ce sujet : il suffit de l'adapter pour avoir une limite en hauteur et une autre en largeur. Au passage ton code serait plus clair si tu ne nommais pas $ratio une variable qui ne correspond pas à un ratio. Smiley cligne
Modifié par Heyoan (02 Aug 2009 - 19:16)
oui désolé il sagit bien d'un ratio et pas d'une hauteur j'ai édite mon message pour etre plus claire.
fabrice88 a écrit :
oui désolé il sagit bien d'un ratio et pas d'une hauteur j'ai édite mon message pour etre plus claire.
Euh... non : ton message est clair. C'est bien ton code qui ne l'est pas car la variable $ratio devrait s'appeler $taille_max.
bon alors voilà j'ai modifié mon code et ajouter une largeur maxi et une hauteur maxi.
le probleme et que les miniature ne prennent pas toujours les valeurs maxi données. j'ai bien toujours sur les miniatures une des 2 valeures maxi de 130 ou 173 mais certaines minatures on comme valeurs par exemple 173 x 231 ou 195 x 130 et du coup je depasse la taille maxi de la miniature qui ne devrait pas dépasser en largeur 173 et en hauteur 130.

voici mon code modifié :


// on défini les tailles maxi pour nos miniatures

$hauteur_max = 130;  
$largeur_max = 173;  

// on défini le répertoire qui contient nos images de grande taille  
$dir = '../images/galerie/';  
 
// si aucune image n'est donnée en arguments, on redirige le visiteur vers l'accueil de la galerie  
if (!isset($_GET['f'])) { 
   header('location: galerie-photos-vosges.php'); 
   exit();  
}  
else { 
   // on récupère le nom de fichier à miniaturiser 
   $image = $_GET['f']; 
   // on récupère les infos de cette image 
   $tableau = @getimagesize('../images/galerie/'.$image); 
   // si il ne s'agit pas d'un fichier image, on redirige le visiteur vers l'accueil de la galerie 
   if ($tableau == FALSE) { 
      header('location: galerie-photos-vosges.php'); 
      exit(); 
   } 
   else { 
      // si notre image est de type jpeg 
      if ($tableau[2] == 2) { 
         // on crée une image à partir de notre grande image à l'aide de la librairie GD 
         $src = imagecreatefromjpeg($dir.'/'.$image); 
         // on teste si notre image est de type paysage ou portrait 
         if ($tableau[0] > $tableau[1]) { 
            $im = imagecreatetruecolor(round(($hauteur_max/$tableau[1])*$tableau[0]), $hauteur_max); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($hauteur_max/$tableau[1])*$tableau[0]), $hauteur_max, $tableau[0], $tableau[1]); 
         } 
         else { 
            $im = imagecreatetruecolor($largeur_max, round(($largeur_max/$tableau[0])*$tableau[1])); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, $largeur_max, round($tableau[1]*($largeur_max/$tableau[0])), $tableau[0], $tableau[1]); 
         } 
         // on génère des images à la volée, on envoie un header au navigateur web du visiteur lui disant que le fichier mini.php va en fait générer une image de type jpeg, soit du type mime image/jpeg. 
         header ("Content-type: image/jpeg"); 
         imagejpeg ($im); 
      } 
      elseif ($tableau[2] == 3) { 
         $src = imagecreatefrompng($dir.'/'.$image); 
         if ($tableau[0] > $tableau[1]) { 
            $im = imagecreatetruecolor(round(($hauteur_max/$tableau[1])*$tableau[0]), $hauteur_max); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($hauteur_max/$tableau[1])*$tableau[0]), $hauteur_max, $tableau[0], $tableau[1]); 
         } 
         else { 
            $im = imagecreatetruecolor($largeur_max, round(($largeur_max/$tableau[0])*$tableau[1])); 
            imagecopyresampled($im, $src, 0, 0, 0, 0, $largeur_max, round($tableau[1]*($largeur_max/$tableau[0])), $tableau[0], $tableau[1]); 
         } 
         header ("Content-type: image/png"); 
         imagepng ($im); 
      } 
   }  
}  


Modifié par fabrice88 (02 Aug 2009 - 20:41)
Ben ça ne peut pas fonctionner puisque tu continues de vérifier si l'image est un portrait ou un paysage alors qu'il faut systématiquement vérifier les 2 dimensions...



// on défini les tailles maxi pour nos miniatures 
$hauteur_max = 130;   
$largeur_max = 173;   
 
// on défini le répertoire qui contient nos images de grande taille   
$dir = '../images/galerie';   
  
// si aucune image n'est donnée en arguments, on redirige le visiteur vers l'accueil de la galerie   
if (!isset($_GET['f'])) {  
   header('location: galerie-photos-vosges.php');  
   exit();   
}   
else {  
   // on récupère le nom de fichier à miniaturiser  
   $image = $_GET['f'];  
   $file = $dir.'/'.$image;

   // on récupère les infos de cette image  
   $tableau = @getimagesize($file);  
   // si il ne s'agit pas d'un fichier image, on redirige le visiteur vers l'accueil de la galerie  
   if ($tableau == FALSE) {  
      header('location: galerie-photos-vosges.php');  
      exit();  
   }  
   else {  
      // on détermine les dimensions de la miniature
      $new_largeur=$tableau['0'];
	  $new_hauteur=$tableau['1'];
	  
	  if ( $new_largeur > $largeur_max ) {
		$coef=$new_largeur/$largeur_max;
		$new_largeur=$new_largeur/$coef;
		$new_hauteur=$new_hauteur/$coef;
	  }
	  
	  if ( $new_hauteur > $hauteur_max ) {
		$coef=$new_hauteur/$hauteur_max;
		$new_largeur=$new_largeur/$coef;
		$new_hauteur=$new_hauteur/$coef;
	  }

	  $img_out = imagecreatetruecolor($new_largeur, $new_hauteur);  

      // si notre image est de type jpeg  
      if ($tableau[2] == 2) {
         $img_in = imagecreatefromjpeg($file);  
		 imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, $new_largeur, $new_hauteur, $tableau[0], $tableau[1]);  
         header("Content-type: image/jpg");  
         imagejpeg($img_out);  
      }  
      // si notre image est de type png  
      elseif ($tableau[2] == 3) {  
         $img_in = imagecreatefrompng($file);
		 imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, $new_largeur, $new_hauteur, $tableau[0], $tableau[1]);  
         header("Content-type: image/png");  
         imagepng($img_out);  
      }
   }   
}

Modifié par Heyoan (02 Aug 2009 - 22:08)