upload d'image et dimension

Eléphant du PHP | 216 Messages

19 avr. 2010, 14:22

Bonjour,

j'ai le script suivant qui permet de uploader des fichier et de créer des miniatures

		if (move_uploaded_file($_FILES['up_photo']['tmp_name'], $dest_dossier . $dest_fichier)) // à ce moment on met le fichier sur le serveur
			{
				
				// Creation de l'image miniature 
				
				 // si notre image est de type jpeg 
				if ($tableau[2] == 2) 
				{ 
					// on crée une image à partir de notre grande image à l'aide de la librairie GD 
					$src = imagecreatefromjpeg($dest_dossier.'/'.$dest_fichier); 
					// on teste si notre image est de type paysage ou portrait 
					if ($tableau[0] > $tableau[1]) 
					{ 
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
					} 
					else 
					{ 
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
					} 
					// on copie notre fichier généré dans le répertoire des miniatures 
					imagejpeg ($im, $dest_dossier_mini.'/'.$dest_fichier); 
				} 
				
				if ($tableau[2] == 3) 
				{ 
					$src = imagecreatefrompng($dir.'/'.$file_upload); 
					if ($tableau[0] > $tableau[1]) 
					{ 
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
					} 
					else 
					{ 
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
					} 
					imagepng ($im, $dir_mini.'/'.$file_upload); 
				} 
 
 
 

J'aimerais fixer à l'image une largeur maximale et une hauteur maximale.

Au fait j'aimerais que l'image ne fasse pas plus de 150 pixel de large et 200 pixels de hauteur...

devlop78
Invité n'ayant pas de compte PHPfrance

19 avr. 2010, 15:21

il manque du code ... il est question de $ratio ...

ViPHP
ViPHP | 5462 Messages

19 avr. 2010, 18:54

vive ImageMagick :mrgreen:
$image = new Imagick('image.jpg');
$image->thumbnailImage(200, 200, true);
$image->writeImage('image.jpg');

Eléphant du PHP | 216 Messages

20 avr. 2010, 10:15

il manque du code ... il est question de $ratio ...
Bonjour,

voici la partie du code manquant

	  $ratio = 50;  
	  
	  // Création des dossiers
	
	  if (!file_exists($dest_dossier)) 
	  {
		mkdir ($dest_dossier, 0777); 
	  }
	  
	  if (!file_exists($dest_dossier_mini)) 
	  {
		mkdir ($dest_dossier_mini, 0777); 
	  }
	  
	  // on compte d'abord le nombre d'image dans le répertoire
	  
	  $num_images = count_files($dest_dossier);
	  
	if ($num_images < 10)
	{
	  
	  
	   // on teste si le champ permettant de soumettre un fichier est vide ou non
		if (empty($_FILES['up_photo']['tmp_name'])) 
		{
			// si oui, on affiche un petit message d'erreur
			$erreur[] = 'Aucun fichier envoyé.';
		}
		else
		{

			// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier 
			//(je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations) 
	  
			$tableau = @getimagesize($_FILES['up_photo']['tmp_name']); 
	    
			if ($tableau == FALSE) 
			{ 
				// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur 
				unlink($_FILES['up_photo']['tmp_name']); 
				$erreur[] = 'Votre fichier n\'est pas une image.'; 
		     }
			 else
			 {
  
				// vérifications de l'extention
  
				if( !in_array( substr(strrchr($_FILES['up_photo']['name'], '.'), 1), $extensions_ok ) )
 
				{
					$erreur[] = 'Veuillez sélectionner un fichier de type png, gif ,jpg ou jpeg !';
				}
  
					elseif( file_exists($_FILES['up_photo']['tmp_name'])
  
					and filesize($_FILES['up_photo']['tmp_name']) > $max_size)
  
				{
					$erreur[] = 'Votre fichier doit faire moins de 500Ko !';
				}
	  
				// on détremine la taille de la photo
	  
				$up_taille = $_FILES['up_photo']['size'];
				
				$dest_fichier = basename($_FILES['up_photo']['name']);// cela donne le même résultat que la commande ==> $_FILES['up_photo']['name'];
				
				// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload 
	  
				if (is_file($dest_dossier .$_FILES['up_photo']['name']))
				{
						// echo 'dest_fichier = '.$dest_fichier;
					$dest_fichier = '_'.$_FILES['up_photo']['name']; 
					 	// echo 'dest_fichier = '.$dest_fichier;
				}
				
				
				// formatage nom fichier
				// enlever les accents

				$dest_fichier = strtr($dest_fichier,

				'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
				'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 
				// remplacer les caracteres autres que lettres, chiffres et point par _
 
				$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
				
			
	  
				// on vérifie si le fichier n'est pas déjà présent : 
	  
				$chemin_fic = $dest_dossier . $dest_fichier;
		  
			
				/*if (file_exists($chemin_fic)) 
				{
					$dest_fichier = 'DUP'.$dest_fichier;
					echo 'dest_fichier = '.$dest_fichier;
				}*/
				// si l'image n'est ni un jpeg, ni un png, on supprime  le fichier uploadé et on affiche le message d'erreur
				 
				if (!($tableau[2] == 2 || $tableau[2] == 3)) 
				{ 
					 unlink($_FILES['up_photo']['tmp_name']); 
					 $erreur[] = 'Votre image est d\'un format non supporté. Les formats supportés sont uniquement jpeg et png.'; 
				} 
				
			}
		}
	}

Je ne peux pas utiliser Imagick car je n'ai pas l'extention...

Mammouth du PHP | 672 Messages

20 avr. 2010, 10:34

... Et tu as testé ton script actuel ?
Il te donne quoi ? :roll:

Eléphant du PHP | 216 Messages

20 avr. 2010, 12:26

Ben mon script il fonctionne.
Il me créer des images plus petites dans un répertoire spécifique.

Par contre il ne me redimensionne pas les images d'origine...

Au fait si les images sont supérieures à 200px de large et 200 pixels de long, il faudrait les redimensionner...

Mammouth du PHP | 672 Messages

20 avr. 2010, 12:41

Ben mon script il fonctionne.
Il me créer des images plus petites dans un répertoire spécifique.

Par contre il ne me redimensionne pas les images d'origine...

Au fait si les images sont supérieures à 200px de large et 200 pixels de long, il faudrait les redimensionner...
Ben tu peux t'inspirer de ce qui est déjà fait :
1. Tu crées des images plus petites.
2. Tu supprimes les images d'origine.
=D>

Eléphant du PHP | 216 Messages

20 avr. 2010, 13:24

Ok macgawel, en gros si j'ai besoin de rien je t'appelle c'est ça ;-)

La méthode de ratio ne me va pas.

J'aimerais changer de méthode pour les redimensionner.

Mammouth du PHP | 672 Messages

20 avr. 2010, 14:27

Ok macgawel, en gros si j'ai besoin de rien je t'appelle c'est ça ;-)
Entre autres...


Mais aussi, si tu ne maîtrises pas un minimum les bases de la programmation PHP, pose tes questions dans PHP débutant :twisted:
La méthode de ratio ne me va pas.

J'aimerais changer de méthode pour les redimensionner.
Tu aimerais utiliser quelle méthode ?


Sinon, RTFM - et aussi les discussions qui suivent (exemple)

En gros :
// On définit la taille maximum du fichier
// On sépare largeur et hauteur pour faciliter la maintenance
$max_haut = 200;
$max_larg = 200;
// Et on m'enlève ces @ plus dangereux qu'autre chose !!!
$tableau = getimagesize($_FILES['up_photo']['tmp_name']);
$largeur = $tableau[0];
$hauteur = $tableau[1];
// On calcule le ratio à appliquer. On peut enlever le 1 si on veut agrandir les petites images.
// Désolé, j'utilise la méthode du ratio ;-)
$ratio = min($max_larg/$largeur, $max_haut/$hauteur, 1);
$new_larg = round($ratio * $largeur);
$new_haut = round($ratio * $hauteur);
// Il ne reste plus qu'à générer la nouvelle image...

Eléphant du PHP | 216 Messages

20 avr. 2010, 14:53

Merci pour l'exemple macgawel.

Je devrais m'en sortir avec ça ;-)