Bonjour à toutes et à tous,
Dans le but de faire un genre de "gallerie" en ligne, j'essaie de faire un formulaire d'upload d'images en PHP.
Pour accélérer l'affichage de la gallerie, j'ai les images en grandeur nature, des images "small" et des images "mini".
Je souhaite lors de l'upload de mes images, créer ces mignatures et les stocker sur le serveur.
Je suis presque parvenu à mes fins, mon script marche dans presque toutes les tests, sauf quand l'image est de trop grosse taille (plus de 1500x1500 pixel environ), dans ce cas ci il plante et ne crée pas le fichier de mignature.
Voici ma fonction s'occupant du redimensionnement :
et mon code qui l'appelle, après réception du formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 function redimensionner($fichier,$cheminDestination,$maxWidth,$maxHeight,$name,$extent) { //Passage des paramètres dans la table : imageinfo $imageinfo= getimagesize("$fichier"); $iw=$imageinfo[0]; $ih=$imageinfo[1]; // Si la largeur ou la hauteur depasse la taille maximale if (($ih >= $maxHeight) || ($iw >= $maxWidth)) { // Si la largeur et la hauteur depasse la taille maximale if (($ih >= $maxHeight) && ($iw >= $maxWidth)) { // On cherche la plus grande valeur if ($ih > $iw) { $dH = $maxHeight; // On recalcule la taille proportionnellement $dW = ($iw * $dH) / $ih; } else { $dW = $maxWidth; // On recalcule la taille proportionnellement $dH = ($ih * $dW) / $iw; } } else if (($ih > $maxHeight) && ($iw < $maxWidth)) { // Si la hauteur depasse la taille maximale $dH = $maxHeight; // On recalcule la taille proportionnellement $dW = ($iw * $dH) / $ih; } else if (($ih < $maxHeight) && ($iw > $maxWidth)) { // Si la largeur depasse la taille maximale $dW = $maxWidth; // On recalcule la taille proportionnellement $dH = ($ih * $dW) / $iw; } } if ($extent == 'jpg' || $extent == 'JPG' || $extent == 'JPEG' || $extent == 'jpeg') { $image_p = imagecreatetruecolor($dW, $dH); $image = imagecreatefromjpeg($fichier); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $dW, $dH, $iw, $ih); imagejpeg ($image_p,$cheminDestination.$name,100); }else if ($extent == 'png' || $extent == 'PNG') { $image_p = imagecreatetruecolor($dW, $dH); $image = imagecreatefrompng ($fichier); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $dW, $dH, $iw, $ih); imagepng ($image_p,$cheminDestination.$name,100); }else if ($extent == 'gif' || $extent == 'GIF') { $image_p = imagecreatetruecolor($dW, $dH); $image = imagecreatefromgif($fichier); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $dW, $dH, $iw, $ih); imagegif ($image_p,$cheminDestination.$name,100); } ImageDestroy($image_p); }
Y'a-t-il une limite quant à la taille de l'image pour la redimensionner ou l'erreur vient-elle d'autre part ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 $fichier = basename($_FILES['fichier']['name']); $imageinfo= getimagesize($_FILES["fichier"]["tmp_name"]); $iw=$imageinfo[0]; $ih=$imageinfo[1]; if ($iw < 3000 && $ih < 3000) { $pathinfo = pathinfo($_FILES['fichier']["name"]) ; $extent = $pathinfo["extension"] ; $newname = $pathinfo["filename"]; $i=1; $newname_inter = $newname; while (file_exists($repertoireDestination.$newname.".".$extent)) { $newname = $newname_inter.$i ; $i++ ; } redimensionner ($_FILES["fichier"]["tmp_name"],$repertoireDestinationSmall,480,10000, $newname.".".$extent,$extent); redimensionner ($_FILES["fichier"]["tmp_name"],$repertoireDestinationMini,75,75,$newname.".".$extent,$extent) move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoireDestination.$newname.".".$extent); $id_auteur = $_SESSION['id']; $query = "INSERT INTO galerie VALUES ( '', '".$_POST["type"]."', '$id_auteur', '".$newname.".".$extent."' );"; mysql_query($query); echo "Réussi !"; }else{ echo "Image trop grande"; }
Merci de vos réponse,
Edit : Après avoir effectué un test en local sous Wamp, il s'avère que ça marche bien. Est-ce donc dû au serveur qui ne suis pas ? C'est lourd ce redimensionnement d'image ?
Taz
Partager