Je viens vers vous car j'ai un soucis concernant un script permettant de redimensionner une image selon une taille prédéfinie.
Pour le principe, un internaute choisi une image qu'il souhaite mettre sur son espace en faisant parcourir et quand il fait 'générer la vignette", un script php s'enclenche. Il redimensionne l'image avec une taille de 267px par 200px et la colle dans un répertoire de destination.
Ce script fonctionne très bien mais seulement lorsque les images choisie ont une taille inférieur à 1600 X 1200. Lorsque la taille est supérieur, il colle l'image dans le bon répertoire mais sans la retailler et il me met le message d'erreur suivant:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 12288 bytes) in page.php on line 48
J'héberge mon site sur Infomaniak et voici les données fournies par le php info:
- memory_limit: 16M
- post_max_size: 48M
- upload_max_filesize: 48M
Et pour ce qui est de mons script php:
unset($erreur);
$extensions_ok = array('JPG', 'jpg', 'jpeg');
$date = date("d-m-Y");
if ((isset($_FILES['photo1'])) && (in_array( substr(strrchr($_FILES['photo1']['name'], '.'), 1), $extensions_ok ))) {
$dest_dossier = "Images/".$row_rs_fiche_etab['type_etab']."/";
$_FILES['photo1']['name'] = $row_rs_fiche_etab['etab_id']."-".$row_rs_fiche_etab['type_etab']."-01.jpg";
$dest_fichier = basename($_FILES['photo1']['name']);
// copie du fichier
move_uploaded_file($_FILES['photo1']['tmp_name'], $dest_dossier . $dest_fichier);
$image1 = $dest_dossier . $dest_fichier; // le chemin
// prend la taille de l'image
$dimension=getimagesize($image1);
// superieur à 500 dans l'exemple
if($dimension[1]>195){
$max=200; //taille a redimensionensionner
$reduc=$max/$dimension[1];
if (($dimension[0]*$reduc) <= 267) {
$coef_l=$dimension[0]*$reduc;
} else {
$coef_l= 267;
}
$coef_h=$max;
$chemin = imagecreatefromjpeg($image1);
$nouvelle =imagecreatetruecolor ($coef_l, $coef_h);
imagecopyresampled($nouvelle,$chemin,0,0,0,0,$coef_l,$coef_h,$dimension[0],$dimension[1]);
imagejpeg($nouvelle,$image1);
imagedestroy ($chemin);
}
}
Merci par avance pour toute aide que vous m'apporterez afin que je comprenne d'où vient l'erreur en espérant que ce ne soit pas infomaniak qui bride le système sans quoi je ne pourrais rien faire.