Bonjour,
Pour un besoin spécifique, je dois créer une image qui est une fusion de plusieurs images présentes sur mon serveur.
J'utilise donc la librairie GD afin de créer une image de la taille nécessaire à accueillir toutes mes images collées bord à bord, l'une en dessous de l'autre (2 images côte à côte en largeur).
Je vais vous épargner tout mon code car beaucoup de traitements pour récupérer les images nécessaires mais côté GD ça donne quelque chose comme
Ma contrainte est que la résolution de mon image finale doit être de 3840x2160 (car en largeur je colle 2 images de 1920x1080 dont je dois conserver la résolution) et que le nombre d'images à fusionner peut être important.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php $fond_img = imagecreatetruecolor($largeur, $hauteur); foreach($tabImages as $image){ $img = imagecreatefromjpeg($image); imageresolution($img,$largeurImage,$hauteurImage); imagecopyresampled($fond_img,$img,$ref_largeur,$ref_hauteur,0,0,$largeurImage,$hauteurImage,$largeurSource,$hauteurSource); imagedestroy($img); } imagejpeg($fond_img, $cheminDestinationImage); ?>
Du coup, lorsque je dépasse un certain nombre d'images, le serveur me renvoi une Erreur 500.
Pour le moment, le max sans tomber en erreur est la création d'une image de 20Mo avec un temps de chargement de 36 secondes.
Pour info :
- Dans php.ini : max_execution_time = 300 - max_input_time = 300 et memory_limit = 1024M
- Dans IIS, propriétés FastCgi : Délai d'activité = 300 - Délai de demande = 90 - Délai d'inactivité = 300
Concernant l'erreur, c'est bien au moment de la création de l'image (fonction imagejpeg) qu'elle se produit car si je commente cette ligne et la remplace par un "echo 'fin traitement'", mon script s'execute bien jusqu'à la fin.
Ce comportement de GD est-il normal ?
Y a-t-il un moyen de contourner cela (sachant que mes max execution time sont très large et que l'erreur se produit avant ce délai) ?
Merci de votre aide.
Partager