[PHP] Gallerie : redimensionnement d'img > x*1100px

Gallerie : redimensionnement d'img > x*1100px [PHP] - PHP - Programmation

Marsh Posté le 30-01-2008 à 23:19:34    

Bonjour,
J'ai un problème que j'arrive pas à résoudre avec ma gallerie d'image en php (source complète ci-dessous).
Ce code sert à générer une gallerie d'image avec miniatures à partir d'un dossier contenant les images, et mon problème est le suivant : il ne crée pas de vignette lorsque la hauteur de l'image excede environ 1100 pixels. J'arrive pas à comprendre pourquoi, donc je viens chercher un peu d'aide chez les pro.

 

Merci d'avance :jap:

 
Code :
  1. class Gallery {
  2. var $nom_page = 'gallery.php'; // nom de ce fichier
  3. var $afficher_nom = 1; // 1 = afficher le nom de l'image
  4. var $enlever_extention = 1; // 1 = enlever l'extention dans l'affichage du nom de l'image (ne fonctionne que si $afficher_nom = 1)
  5. var $remplacer_ = 0; // 1 = remplacer les _ par des espaces dans les nom de fichier (ne fonctionne que si $afficher_nom = 1)
  6. var $afficherpoids = 1; // 1 = afficher le poids des images
  7. var $couleur_texte = "#FFFFFF"; // Couleur du texte
  8. var $largeur_miniatures = 120; // Largeur des miniatures
  9. var $hauteur_miniatures = 120; // Hauteur des miniatures
  10. var $imagesaafficherparligne = 4; // Nombre de miniatures affichées par ligne
  11. var $ext_autorise = array('png', 'jpg', 'gif', 'jpeg'); // Types de fichiers utilisés - ne pas modifier
  12. var $dossier_images = './img/eurometal'; // Dossier contenant les images (ne pas mettre de / à la fin)
  13. function afficherHeader() {
  14.  echo "<title>".$this->titre."</title>\r\n<style type=\"text/css\">\r\na:link, a:visited, a:active {\r\ntext-decoration: none;\r\ncolor: ".$this->couleur_texte."\r\n}\r\na:hover {\r\ntext-decoration: underline;\r\ncolor: ".$this->couleur_texte."\r\n}\r\n</style>\r\n</head>\r\n<body text=\"".$this->couleur_texte."\">\r\n<div align=\"center\">\r\n<table width=\"100%\" border=\"0\">\r\n";
  15. }
  16. function afficherFooter() {
  17.  echo "</table></div>\r\n</body>\r\n</html>";
  18. }
  19. function listerDossier() {
  20.  $main = opendir($this->dossier_images);
  21.  while(($n = readdir($main)) !== false) {
  22.   $tempext = strtolower(substr(strrchr($n, '.'),1));
  23.   if(is_file($this->dossier_images.'/'.$n) && in_array($tempext, $this->ext_autorise)) {
  24.    $images[] = $n;
  25.   }
  26.  }
  27.  if(empty($images)) { die($this->afficherHeader()."<tr><td align=\"center\">Dossier vide.</td></tr>\r\n" ).$this->afficherFooter(); }
  28.  sort($images);
  29.  $this->afficherHtml($images);
  30. }
  31. function afficherHtml($images) {
  32.  echo $this->afficherHeader();
  33.  $x = 0;
  34.  while(isset($images[$x])) {
  35.   echo "<tr>\r\n";
  36.   for($i=1; $i <= $this->imagesaafficherparligne; $i++) {
  37.    if(!empty($images[$x])) {
  38.     if($this->afficher_nom == 1) {
  39.      $nom = $images[$x];
  40.      if($this->enlever_extention == 1) { $nom = ereg_replace(substr(strrchr($images[$x], '.'), 0), '', $images[$x]); }
  41.      if($this->remplacer_ == 1) { $nom = ereg_replace('_', ' ', $nom); }
  42.      $nom = "<br />".$nom."";
  43.      if($this->afficherpoids == 1) { $size = "<br /><font size=\"2\">(".round(filesize($this->dossier_images.'/'.$images[$x]) / 1024, 2)." Ko)</font>"; }
  44.     }
  45.     echo '<td width="'.intval(100 / $this->imagesaafficherparligne).'%" align="center"><a href="'.$this->dossier_images.'/'.$images[$x].'" target="_blank"><img src="'.$this->nom_page.'?img='.urlencode($images[$x]).'" alt="" border="0" />'.$nom.'</a>'.$size.'<br /><br /></td>'."\r\n";
  46.     $x++;
  47.    }
  48.   }
  49.   echo "</tr>\r\n";
  50.  }
  51.  echo $this->afficherFooter();
  52. }
  53. function genererMiniatures($img) {
  54.  if(!function_exists('gd_info')) { die('Erreur : la librairie GD n\'est pas activée sur votre serveur.'); }
  55.  $tempext = strtolower(substr(strrchr($img, '.'),1));
  56.  if(!in_array($tempext, $this->ext_autorise));
  57.  if($tempext == 'jpg' || $tempext == 'jpeg') {
  58.   $source = @imagecreatefromjpeg($this->dossier_images.'/'.$img);
  59.  } elseif($tempext == 'gif') {
  60.   $source = @imagecreatefromgif($this->dossier_images.'/'.$img);
  61.  } elseif($tempext == 'png') {
  62.   $source = @imagecreatefrompng($this->dossier_images.'/'.$img);
  63.  } else {  die('Error !'); }
  64.  $infos = @getimagesize($this->dossier_images.'/'.$img);
  65.  $largeur_original = $infos[0];
  66.  $hauteur_original = $infos[1];
  67.  if($infos[0] > $this->largeur_miniatures || $infos[1] > $this->hauteur_miniatures) {
  68.   $pl = $infos[0] / $this->largeur_miniatures;
  69.   $ph = $infos[1] / $this->hauteur_miniatures;
  70.   if ($ph > 1 || $pl > 1) {
  71.    if ($ph > $pl) {
  72.     $largeur_new = $infos[0] / $ph;
  73.     $hauteur_new = $infos[1] / $ph;
  74.    } else {
  75.     $largeur_new = $infos[0] / $pl;
  76.     $hauteur_new = $infos[1] / $pl;
  77.    }
  78.   }
  79.   $img = @imagecreatetruecolor($largeur_new, $hauteur_new);
  80.   @imagecopyresized($img, $source, 0, 0, 0, 0, $largeur_new, $hauteur_new, $largeur_original, $hauteur_original);
  81.   @header('Content-type: image/jpeg');
  82.   @imagejpeg($img, '', 100);
  83.  } else {
  84.   @header('Content-type: '.$infos['mime']);
  85.   echo file_get_contents($this->dossier_images.'/'.$img);
  86.  }
  87. }
  88. }
  89. $class = new Gallery();
  90. if(!empty($_GET['img'])) {
  91. $img = get_magic_quotes_gpc() ? stripslashes($_GET['img']) : $_GET['img'];
  92. $class->genererMiniatures($img);
  93. } else {
  94. $class->listerDossier();
  95. }


Message édité par san_ le 30-01-2008 à 23:20:28
Reply

Marsh Posté le 30-01-2008 à 23:19:34   

Reply

Marsh Posté le 31-01-2008 à 01:21:04    

Si tu as une config par défaut de ton serveur, la limite de mémoire est certainement trop basse pour de grosses images. La solution à ton problème est peut être donnée ici:
http://php.net/imagecreatefrompng
en bas dans le 3ème commentaire des utilisateurs
Si tu es en hébergement mutualisé, tu ne sera certainement pas autorisé à modifier la quantité de mémoire dont tu dispose.

Reply

Marsh Posté le 31-01-2008 à 09:35:50    

Deja, merci du coup de main.
En fait le poids du fichier ne pose pas de souci; c'est vraiment la résolution de l'image le problème. Comme pour "jboyd1189", 5e commentaire :

Citation :

It appears that the maximum number of pixels this function will process is 1,040,000.  So, be sure that the pixel resolution of the image (eg. 1040 x 1000) does not exceed this value.

 

edit : autant pour moi, tu avais bien raison. Il suffit de modifier la ligne "memory_limit = 8M" en 16M dans php.ini pour résoudre le problème.
Et génial, je viens de voir sur le phpinfo du serveur ovh que la limite est 32M. Merci beaucoup pour le coup de main :jap:.


Message édité par san_ le 31-01-2008 à 09:51:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed