Bonjour,

j'ai utilisé du code trouvé sur différents tutoriaux pour mettre en place un upload de photo sur mon site. Cela fonctionne pour des images "légères" (même si je trouve cela un peu long) mais par contre cela bloque pour des images plus volumineuses (> 2 Mo).

Me conseillez-vous de revoir mon code, de limiter le poids et la résolution des images ?

Méthode principale

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
 
// Définir le nom de l'image
$extension = Fonctions::getExtension($_FILES[$this->inputName]['name']);
$remoteFile = './'.$this->uploadDir.'/'.$_id.'/tmp_'.$indice.'_'.time().'.'.$extension;
$newFile = './'.$this->uploadDir.'/'.$_id.'/'.$indice.'_'.time().'.'.$extension;			
 
// Traiter les images en fonction de leur type
if($_FILES[$this->inputName]["type"] == "image/jpeg" || $_FILES[$this->inputName]["type"] == "image/pjpeg"){
	$image_source = imagecreatefromjpeg($_FILES[$this->inputName]["tmp_name"]);
	imagejpeg($image_source, $remoteFile, 100);
}else if($_FILES[$this->inputName]["type"] == "image/gif"){
	$image_source = imagecreatefromgif($_FILES[$this->inputName]["tmp_name"]);
	imagegif($image_source, $remoteFile, 100);
}else if($_FILES[$this->inputName]["type"] == "image/png" || $_FILES[$this->inputName]["type"] == "image/x-png"){
	$image_source = imagecreatefrompng($_FILES[$this->inputName]["tmp_name"]);
	imagepng($image_source, $remoteFile, 9);
}
 
// Copier l'image reçu sur le serveur et donner les bon droits sur le fichier
chmod($remoteFile,0644);
 
// Récupérer les dimensions de l'image
list($imageWidth, $imageHeight) = getimagesize($remoteFile);
 
// Créer l'image chargée
if($_FILES[$this->inputName]["type"] == "image/jpeg" || $_FILES[$this->inputName]["type"] == "image/pjpeg"){
	$imageSource = imagecreatefromjpeg($remoteFile);
}else if($_FILES[$this->inputName]["type"] == "image/gif"){
	$imageSource = imagecreatefromgif($remoteFile);
}else if($_FILES[$this->inputName]["type"] == "image/png" || $_FILES[$this->inputName]["type"] == "image/x-png"){
	$imageSource = imagecreatefrompng($remoteFile);
}			
 
$time = time();
 
// Enregistrer format XL
$newFile = $this->uploadDir.$_id.'/XL/'.$indice.'_'.$time.'.'.$extension;
$this->enregistrerImage(512, 384, $imageWidth, $imageHeight, $imageSource, $newFile);
 
// Enregistrer formay miniature
$newFile = $this->uploadDir.$_id.'/'.$indice.'_'.$time.'.'.$extension;
$this->enregistrerImage(256, 192, $imageWidth, $imageHeight, $imageSource, $newFile);
 
// Supprimer l'image chargée
unlink($remoteFile);
imagedestroy($imageSource);

Méthode permettant de redimensionner une image

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
 
// Vérifier que les dimensions de l'image sont plus petites que le format attendu
if($_imageWidth>$_resizeWidth || $_imageHeight >$_resizeHeight){			
	// Calculer les nouvelles dimensions
	$proportion = min($_resizeWidth/$_imageWidth, $_resizeHeight/$_imageHeight);
	$newWidth = round($_imageWidth*$proportion);
	$newHeight = round($_imageHeight*$proportion);
}else{
	$newWidth = $_imageWidth;
	$newHeight = $_imageHeight;
}
 
$newImage = imagecreatetruecolor($_resizeWidth , $_resizeHeight);
 
// Calculer la décalage afin de centrer la miniature
$posX = ($_resizeWidth - $newWidth)/2;
$posY = ($_resizeHeight - $newHeight)/2;
 
imagecopyresampled($newImage, $_imageSource, $posX, $posY, 0, 0, $newWidth, $newHeight, $_imageWidth, $_imageHeight);
imagejpeg($newImage, $_newFile, 100);
 
imagedestroy($newImage);
Un grand merci à ceux qui ont pris le temps de lire ce message... et encore plus si vous y répondez