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

  FORUM HardWare.fr
  Programmation
  PHP

  Probleme de dimensions dans un script de traitement d'image

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de dimensions dans un script de traitement d'image

n°1162897
Dawa
www.shootmeagain.com
Posté le 28-07-2005 à 12:17:44  profilanswer
 

Hello à tous,
 
 
J'ai sur mon site un script de redimensionnement d'image, qui va donc réduire une image qu'on vient d'uploader... Ce script a toujours très bien fonctionné, mais depuis que j'ai ce nouvel hébergement chez Nexlink, les images ne passaient plus... Avec ce message d'erreur :
 

Citation :

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate
2000 bytes) in /mnt/sites/shootmeagain.com/web/thumb.php on line 6


 
La ligne 6 étant la suivante :  
$img = ImageCreateFromJpeg($file);
 
J'ai eu le problème avec une image de 2000x1000 pixels alors qu'une image de
2000x500 pixels marche sans problème...
 
 
Et j'ai reçu cette réponse du service technique Nexlink :
 

Citation :

Bonjour,
 
La mémoire allouée pour l'exécution des scripts PHP est de 8Mo. Avec ce genre de
traitement, la résolution maximale supportée est d'environ 1024x768. Il faut
savoir que pour le traitement d'image, le serveur doit décompresser celle-ci
afin de pouvoir la redimensionner.
 
Meilleures salutations,
NexLink Support Team


 
 
Que faire pour contourner ce problème ? J'espère qu'il y a un moyen quelconque? :/


Message édité par Dawa le 28-07-2005 à 12:18:04

---------------
SHOOT ME AGAIN WEBZINE
mood
Publicité
Posté le 28-07-2005 à 12:17:44  profilanswer
 

n°1162900
plainsofpa​in
Pingouino's lover
Posté le 28-07-2005 à 12:20:27  profilanswer
 

ca ne te semble pas un peu grand 2000*1000 ?


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
n°1162933
Dawa
www.shootmeagain.com
Posté le 28-07-2005 à 12:46:45  profilanswer
 

C'etait pour tester... C'est pour faire des galeries de photos, et les gens qui participent au site balancent parfois leur photo non retouché, en 1600*1200 par exemple, et c'est le script qui est censé se charger du reste.


---------------
SHOOT ME AGAIN WEBZINE
n°1163084
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 14:33:37  profilanswer
 

C'est bizarre ton truc, je fais régulièrement des transferts d'image de 2272x1704 (natif mon APN quoi) et j'ai aucun soucis.
Bon, j'suis sur un dédié, mais ma mémoire est quand même fixé à 8Mo par script Max. et ça fonctionne quand même très bien.

n°1163096
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 14:36:04  profilanswer
 

Par contre, tu détruis bien tes images après traitement ?
 
Fais voir ton script de redimentionnement...

n°1163144
Dawa
www.shootmeagain.com
Posté le 28-07-2005 à 14:54:43  profilanswer
 

voici le script complet...
 
 

Code :
  1. function resize($file, $tofname, $maxWidth, $maxHeight, $path)
  2.   {
  3.     $prod=$maxWidth*$maxHeight;
  4.      //Créé une image à partir de $file
  5.       $img = ImageCreateFromJpeg($file);
  6.      //Dimensions de l'image
  7.      $imgWidth = imagesx($img);
  8.      $imgHeight = imagesy($img);
  9.      //Facteur largeur/hauteur des dimensions max
  10.      $whFact = $maxWidth/$maxHeight;
  11.      //Facteur largeur/hauteur de l'original
  12.      $imgWhFact = $imgWidth/$imgHeight;
  13.      //fixe les dimensions du thumb
  14.      if($imgWidth <= $maxWidth && $imgHeight <= $maxHeight)
  15.      {
  16.          $thumbWidth=$imgWidth;
  17.          $thumbHeight=$imgHeight;
  18. }
  19. else
  20. {     
  21.          if($imgWidth > $imgHeight)
  22.          {
  23.             //Si largeur déterminante
  24.             $thumbWidth  = $maxWidth;
  25.             $thumbHeight = $thumbWidth/$imgWhFact;
  26.             if($thumbHeight>$maxHeight)
  27.             {
  28.                 $redimfact=$thumbHeight/$maxHeight;
  29.                 $thumbHeight=$maxHeight;
  30.                 $thumbWidth=$thumbWidth/$redimfact;
  31.             }
  32.            }
  33.            else
  34.            {
  35.             //Si hauteur déterminante
  36.             $thumbHeight = $maxHeight;
  37.             $thumbWidth = $thumbHeight*$imgWhFact;
  38.             if($thumbWidth>$maxWidth)
  39.             {
  40.                 $redimfact=$thumbWidth/$maxWidth;
  41.                 $thumbWidth=$maxWidth;
  42.                 $thumbHeight=$thumbHeight/$redimfact;
  43.             }
  44.         }
  45.     }
  46.      //Créé le thumb (image réduite)
  47.      $imgThumb = ImageCreateTruecolor($thumbWidth, $thumbHeight);
  48.      //Insère l'image de base redimensionnée
  49.      ImageCopyResampled($imgThumb, $img, 0, 0, 0, 0, $thumbWidth,
  50. $thumbHeight, $imgWidth, $imgHeight);
  51.      //Nom du fichier thumb
  52.      //list($titretof,$ext,$temp) = explode(".",$file);
  53.      $imgThumbName = $path.$tofname;
  54.      //Créé le fichier thumb
  55.   $fp = fopen($imgThumbName, "wb" );
  56.    fclose($fp);
  57.     // fflush($fp);
  58.      //Renvoie le thumb créé
  59.      ImageJpeg($imgThumb, $imgThumbName,90);
  60.      return $imgThumbName;
  61.   }


 
 
hmmmm je remarque qu'en effet je détruis ptetre pas vraiment tout en fait :o  
 
un truc qui peut coincer là dedans ?


---------------
SHOOT ME AGAIN WEBZINE
n°1163172
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 15:03:42  profilanswer
 

à part le fait que  
#   $fp = fopen($imgThumbName, "wb" );
#    fclose($fp);
ne sert à rien, non.
Par contre, pense à détruire tes images dès que tu n'en as plus besoin (imagedestroy($imgThumb); imagedestroy($img);), autrement, le script conserve peut-être tout en mémoire et zou, ça marche à la première et pas à la seconde.

n°1163460
Dawa
www.shootmeagain.com
Posté le 28-07-2005 à 16:22:25  profilanswer
 

voilà j'ai ajouté  
 
imagedestroy($imgThumb);  
imagedestroy($img);
 
 
juste avant le return et j'ai enlevé les 2 lignes inutiles...
 
mais ca marche toujours pas :/  
ca peut venir d'ou ? :/  
 
merci


---------------
SHOOT ME AGAIN WEBZINE
n°1163488
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 16:29:28  profilanswer
 

Fait un PHP info sur ton serveur, donne ta version de PHP, moi j'ai cette ligne là :
memory_limit 8M 8M
 
Donc, bien que je sois sur un dédié, je suis également limité à 8M et j'y arrive sans problème (dès fois j'en transfert même plusieurs en même temps avec plusieurs onglets).
Par contre, je ne sais pas si la mémoire maximum concerne chaque utilisateur ou tous les utilisateurs qui partagent le serveur (si tu es sur un mutualisé par ex.)

n°1164129
Dawa
www.shootmeagain.com
Posté le 28-07-2005 à 23:51:03  profilanswer
 

Warning: phpinfo() has been disabled for security reasons in /mnt/sites/shootmeagain.com/web/phpinfo.php on line 2
 
super :D
 
mais qd le type me dit
 

Citation :


La mémoire allouée pour l'exécution des scripts PHP est de 8Mo. Avec ce genre de
traitement, la résolution maximale supportée est d'environ 1024x768. Il faut
savoir que pour le traitement d'image, le serveur doit décompresser celle-ci
afin de pouvoir la redimensionner.


 
c'est n'importe quoi alors? Si c'est du 8 megas ca devrait passer... sur mon ancien hébergeur en tout cas j'ai dans le phpinfo
 
post_max_size 8M 8M  
 
et ca marchait... :sweat:


---------------
SHOOT ME AGAIN WEBZINE
mood
Publicité
Posté le 28-07-2005 à 23:51:03  profilanswer
 

n°1164143
Natopsi
☄️Just end it already!☄️
Posté le 28-07-2005 à 23:59:12  profilanswer
 

:??:


---------------
ACH/VDSHFRCoin◈1435mm⚡
n°1164146
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 28-07-2005 à 23:59:38  profilanswer
 

Bah ça me parait bizarre.
Enfin, je sais pas, moi j'ai toujours fonctionné comme ça même avant mon dédié, je transférais direct de mon APN, c'était pas super rapide (900ko en moyenne), mais ça fonctionnait même chez mon mutualisé.

n°1164148
Natopsi
☄️Just end it already!☄️
Posté le 29-07-2005 à 00:00:41  profilanswer
 

:D Change d'hébergeur  :D


Message édité par Natopsi le 29-07-2005 à 00:00:55

---------------
ACH/VDSHFRCoin◈1435mm⚡
n°1164155
Dawa
www.shootmeagain.com
Posté le 29-07-2005 à 00:06:50  profilanswer
 

Ca me parait bizarre aussi... Je suis chez cet hébergeur depuis une semaine :D
 
Je recontacterai le service technique on verra bien... mais c'est clair qu'il y a rien de logique là :/


---------------
SHOOT ME AGAIN WEBZINE
n°1164158
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 29-07-2005 à 00:11:14  profilanswer
 

Au pire, une image de 2000 x 1000 pixels, ça prend, une fois décompréssé 6000000 d'octets, normalement, avec 8388608, ça te laisse plus de 2000000 pour créer ta miniature, ça devrait suffire, à moins que ton script qui précède soit vraiment vraiment énorme ou que ton image contienne des couches alphas.


Message édité par The-Shadow le 29-07-2005 à 00:11:25
n°1164241
Dawa
www.shootmeagain.com
Posté le 29-07-2005 à 08:25:15  profilanswer
 

bah j'ai testé avec un jpg rempli de blanc qui fait meme pas 10ko...
 
et le script qui precede c'est juste une formulaire d'upload, rien de très gourmand...
 

Citation :

$nomtof="image".$i;
 if(is_uploaded_file ($_FILES[$nomtof]['tmp_name']))
 {  
  $tof=$_FILES[$nomtof]['tmp_name'];
  $newname=$_FILES[$nomtof]['name'];
  $newname = rawurldecode($newname);  
  $newname=no_accent($newname);
  $newname=strtolower($newname);
  $resized=resize($tof,$newname,800,700,"photos/".$_POST['gal']."/" );
  $thumb=resize($tof,$newname,130,130, "photos/".$_POST['gal']."/small/" );
  MAJtof($_POST['mode'], $_POST, $bd, $newname);
  $ok=1;
 }
 else
 {
  if($ok!=1)
  {
   echo div("redirect" );
   echo "Erreur envoi fichier";
   echo findiv();
  }
  $ok=-1;
 }


---------------
SHOOT ME AGAIN WEBZINE
n°1171638
Dawa
www.shootmeagain.com
Posté le 07-08-2005 à 13:46:32  profilanswer
 

Juste pour info, j'ai pu contourner cette limite de 8megas (qui n'est apparemment effective que sur certaines versions de PHP, c'est pourquoi ça peut marcher chez vous avec de plus grosses images, le script prend malgré tout + de 8 megas...).
 
il a suffi d'ajouter  
 

Code :
  1. ini_set("memory_limit","20M" );


 
au début de mon script, puisque je n'avais bien sur pas accès au php.ini...
 
merci de vos conseils en tout cas, ca m'a mis sur la piste !


---------------
SHOOT ME AGAIN WEBZINE

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

  Probleme de dimensions dans un script de traitement d'image

 

Sujets relatifs
[VBA] Access, probleme de requeteprobleme dans la gestions des cookies pour compteur graphique
Problême de compilation (bis)Problème de "soulignement" d'image sous firefox.
[résolu] ezpdf, problème de mise en pageProblème de compilation avec GCC
mettre une image dans un tooltipmenu deroulant (java script et CSS)
Problème applet java 
Plus de sujets relatifs à : Probleme de dimensions dans un script de traitement d'image


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