Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2855 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1679342
san_
Posté le 30-01-2008 à 23:19:34  profilanswer
 

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
mood
Publicité
Posté le 30-01-2008 à 23:19:34  profilanswer
 

n°1679359
nargy
Posté le 31-01-2008 à 01:21:04  profilanswer
 

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.

n°1679414
san_
Posté le 31-01-2008 à 09:35:50  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
PHP aleatoire Problème de débutant.[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )
Sécurité physique d'application PHP[Résolu] [PHP][XML][PDF] Comment appeler FOP depuis une page PHP ?
Webmail en PHP[PHP] Problème avec exec() dont ret_val = -1
[PHP] Script Boutique simple sans caddie, pour occasions[Resolu] Equivalent de la commande unpack de PHP/Perl en Java
[PHP] conditions multiples dans un switch - problème de design pattern[XML / Flash / PHP] Insertion galerie Photoshop dans page web
Plus de sujets relatifs à : [PHP] Gallerie : redimensionnement d'img > x*1100px


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR