Page 1 sur 1

Problème d'upload et modification d'images

Posté : 13 mars 2008, 20:48
par fougere
J'ai réalisé un script me permetant de placer une image dans un dossier et ensuite directement la redimensionner par rapport a son format (portrait ou paysage) et y placer le copyright.

Et bien il fonctionne mais a partir d'une certainne taille il upload les images mais ne les redimensionnement plus.

Si quelqu'un a une solution ou au moins une explication parceque je sèche depuis déjà un bout de temps la dessys.

Merci
<?php
	if( isset($_POST['upload']) ) // si formulaire soumis
	{
	    $content_dir = "images/"; // dossier où sera déplacé le fichier

	    $tmp_file = $_FILES['fichier']['tmp_name'];

	    if( !is_uploaded_file($tmp_file) )
	    {
	        exit("Le fichier est introuvable");
	    }

	    // on vérifie maintenant l'extension
	    $type_file = $_FILES['fichier']['type'];

	    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') )
	    {
	        exit("Le fichier n'est pas une image");
	    }
		
	    // on copie le fichier dans le dossier de destination
	    $name_file = $_FILES['fichier']['name'];

	    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
	    {
	        exit("Impossible de copier le fichier dans $content_dir");
	    }

	    echo "<p>Le fichier a bien été uploadé</p>";

		
		// ne veut pas modifier si plus de 1512 px de largeur et 944 de hauteur
		
		
									///a modifier///

			$tailleMaxDemande = 				600;  // taille maximum que l'on veut soite en hauteur ou en largeur suivent le format (portrait/paysage)
			$fichierSource = 					"$content_dir$name_file";			// ou est la photo a modifier
			$fichierDestination = 				"$content_dir$name_file";  		//ou on veut la pacer
			$texteCopyright = 					"copyright";  	//texte du copyright
							// couleur du texte de copyright en RVB
										$rouge = 230;
										$vert = 224;
										$bleu =  206;

			//ne pas modifier//
$source = imagecreatefromjpeg($fichierSource);
$rapportImage = (imagesx($source) / imagesy($source));
if ($rapportImage < 1 ) // calcul pour verifier si l'image est orizontal ou vertical
{	
$rapport = ((imagesx($source) / imagesy($source)) * $tailleMaxDemande);// calcul pour que l'image fasse la taille max definie demandé de hauteur
$destination = imagecreatetruecolor($rapport, $tailleMaxDemande); 
} 
else 
{
$rapport = ((imagesy($source) / imagesx($source)) * $tailleMaxDemande);  // calcul pour que l'image fasse la taille max definie demandé de largeur 
$destination = imagecreatetruecolor($tailleMaxDemande, $rapport);
}
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On crée la photo
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

// on rajoute le copyright
$couleurTexte = imagecolorallocate($destination, $rouge, $vert, $bleu);
imagestring($destination, 4, 5, 5, "$texteCopyright", $couleurTexte);

// On enregistre l'image
imagejpeg($destination, $fichierDestination);
}else {echo "tu n'as pas encore envoyé de photos";}
?>

Posté : 13 mars 2008, 22:52
par Cyrano
À partir de quelle taille ?

Il ne faut pas oublier que les format jpg, gif ou png sont des formats compressés. En utilisant les fonctions PHP de l'extension GD, ces fichiers sont décompressés pour être mis dans un format qui peut être traité par PHP. Et c'est là le problème, c'est que ça peut rapidement des ressources trop importantes.

Posté : 13 mars 2008, 23:07
par fougere
il n'applique plus la redim et le copyright a partir 1512 px de largeur et 944 de hauteur

par contre si je change le $tailleMaxDemande en 800 c'est a partir d'autre valeurs que il ne veut plus l'appliquer

je suis dubitatif

Posté : 13 mars 2008, 23:10
par Cyrano
Et le poids des fichiers ?? C'est là que réside probablement le problème. Du coup, ça doit demander trop de mémoire par rapport à ce qui est alloué et ça plante.

Posté : 13 mars 2008, 23:15
par fougere
le fichier fait 844ko mais ca me semble étrange que ce soit le poids car

1000 x 944px ca passe

mais 1000 x 950px ca passe pas

Posté : 14 mars 2008, 07:51
par Cyrano
844Ko compressé encore une fois. GD décompresse ce fichier pour le traiter et ça prend beaucoup plus de place en mémoire. Or l'allocation mémoire est limitée, configurable mais limitée.

Posté : 14 mars 2008, 20:37
par AB
Pour voir si effectivement cela vient de la mémoire essaie d'utiliser
ini_set('memory_limit', taille en octets);
au début de ta page.