Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2011, 17h18   #1
Futur Membre du Club
 
Homme
Inscription : mars 2009
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2009
Messages : 19
Points : 16
Points : 16
Par défaut Redimensionnement d'image avec imagecopyresampled

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 :

Code :
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);  
}
et mon code qui l'appelle, après réception du formulaire :

Code :
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";
}
Y'a-t-il une limite quant à la taille de l'image pour la redimensionner ou l'erreur vient-elle d'autre part ?

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
Bouffe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 21h40   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Les limites sont la mémoire utilisée par le script et le temps de traitement.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web