Redimension avant upload

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redimension avant upload

par iclo » 16 janv. 2007, 15:24

Je ne vois pas dans ton code que tu redimenssionne réelllement l'image. Tu fais bien des calculs pour trouver la nouvelle dimension, mais ton code visiblement ne fait rien de plus. Je te conseillerai d'aller jeter un coud d'oeil à la documentation qui concerne la librairie gd, qui offre toutes les fonctions nécessaire pour manipuler les images.

par Invité » 16 janv. 2007, 11:55

En fait j'ai de gros soucis avec le script que j'ai pu trouver sur internet pour m'aider, j'arrive bien a tout configurer mais lorsque je me retrouve a vouloir modifier l'image, il ne la trouve pas dans le dossier tmp de wamp (le server HTTP que j'utilise).

Je ne comprends pas ou chercher l'image temporaire pour la modifier mon php.ini m'indique :
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "c:/wamp/tmp"
donc je me dis que ce doit être le dossier stocker mais lors de l'envoie on me retorque que :


Warning: getimagesize(.../wamp/tmp/image.jpg.) [function.getimagesize]: failed to open stream: No such file or directory in C:\wamp\www\xxx\xxx.php on line
j'ai le code suivant :
<?php
      require ("connect.php");


      if(isset($_FILES['photo']))

      {
		//parametres
		unset($erreur);
		$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
		$taille_max = 400000000;
		$dest_dossier = './images-site/';
		$size = getimagesize("".$_FILES['photo']['tmp_name']);
	 	$height = $size[1];
       	$width = $size[0];
       	$taille = 2000;

       	// On verrifie que le fichier n'est pas déjà existant
       	if ($handle = opendir('images-site')) {

			while (false !== ($file = readdir($handle))) {
    			if($file == $_FILES['photo']){
      				$Fnm = $_FILES['photo'];
			        $voiture = str_replace(' ','%20%',$Fnm);
			        $fichier = "images-site/".$Fnm;
			        header("location: addphoto.php?erreur5");
					exit();
			    }
			}
		}

		// On verrifie les extensions
	 	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	 	  {
	 	  	$erreur = true;
			header("location: addphoto.php?erreur1");
			exit();
		  }
		// On verrifie la taille du fichier
	 	elseif( file_exists($_FILES['photo']['name']) and $_FILES['photo']['size'] > $taille_max)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur2");
	 	  	exit();
		  }
		elseif( file_exists($_FILES['photo']['name']) and $height > $taille && $width > $taille)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur3");
	 	  	exit();
		  }

		// Si ficher = bonne taille & bonne extension
   	  	if(!isset($erreur))
       	  {

			$dest_fichier = basename($_FILES['photo']['name']);
			//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 redimensionne l'image
			function resize($image,$sm,$type){
			GLOBAL $image,$sm_largeur,$sm_hauteur;
			$path = ".../wamp/tmp/";

			// obtenir la taille de l'image

			$arr = getimagesize("$path$image.$type");

			// initialisation de la variable largeur

			$largeur=$arr[0];

			// initialisation de la variable hauteur
			$hauteur=$arr[1];


			$facteur=($largeur/$sm);

			// Vérifie si l'image est plus petite que $sm

			if ($largeur < $sm){

			// si vrai retourne les mêmes valeurs d'origine de l'image

			$sm_largeur=$largeur;
			$sm_hauteur=$hauteur;

			// sinon affecte des nouvelles valeurs

			} else {
			$sm_largeur=($largeur/$facteur);
			$sm_hauteur=($hauteur/$facteur);
			}
			}

			$image=$_FILES['photo']['name'];
			$sm=400;
			$type="";

			// appel de la fonction

			resize("$image","$sm","$type");

			// On replace le fichier dans le repertoire final
       		move_uploaded_file($image, $dest_dossier . $_FILES['photo']['name']);

			// On remet a jour la base de donnée
			$valide = "UPDATE `images` SET nom = '".$_FILES['photo']['name']."'  WHERE nom = '".$_POST['pseudo']."' ";
			$test = mysql_query($valide) or die("erreur ! ".mysql_error());

			//Redirection sur page precedente
			header("location: addphoto.php");
		 }
      }else{
		header("location: addphoto.php?erreur4");
	  }

?>
Il faudrait simplement retoucher l'image pour l'avoir a la bonne taille avant l'upload mais je ne sais pas pourquoi il ne me trouve pas mon image dans le dossier temporaire, une idée ? :oops:

par agité » 21 oct. 2006, 06:08

En utilisant :
$_FILES['photo']['tmp_name']
a la place de
$_FILES['photo']['name']
Il me trouve bien le fichier apparement l'update bien mais il n'est pas modifier, je ne comprends pas pourqoi ... :roll:

par agité » 21 oct. 2006, 06:00

En fait j'ai de gros soucis avec le script que j'ai pu trouver sur internet pour m'aider, j'arrive bien a tout configurer mais lorsque je me retrouve a vouloir modifier l'image, il ne la trouve pas dans le dossier tmp de wamp (le server HTTP que j'utilise).

Je ne comprends pas ou chercher l'image temporaire pour la modifier mon php.ini m'indique :
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "c:/wamp/tmp"
donc je me dis que ce doit être le dossier stocker mais lors de l'envoie on me retorque que :


Warning: getimagesize(.../wamp/tmp/image.jpg.) [function.getimagesize]: failed to open stream: No such file or directory in C:\wamp\www\xxx\xxx.php on line
j'ai le code suivant :
<?php
      require ("connect.php");


      if(isset($_FILES['photo']))

      {
		//parametres
		unset($erreur);
		$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
		$taille_max = 400000000;
		$dest_dossier = './images-site/';
		$size = getimagesize("".$_FILES['photo']['tmp_name']);
	 	$height = $size[1];
       	$width = $size[0];
       	$taille = 2000;

       	// On verrifie que le fichier n'est pas déjà existant
       	if ($handle = opendir('images-site')) {

			while (false !== ($file = readdir($handle))) {
    			if($file == $_FILES['photo']){
      				$Fnm = $_FILES['photo'];
			        $voiture = str_replace(' ','%20%',$Fnm);
			        $fichier = "images-site/".$Fnm;
			        header("location: addphoto.php?erreur5");
					exit();
			    }
			}
		}

		// On verrifie les extensions
	 	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	 	  {
	 	  	$erreur = true;
			header("location: addphoto.php?erreur1");
			exit();
		  }
		// On verrifie la taille du fichier
	 	elseif( file_exists($_FILES['photo']['name']) and $_FILES['photo']['size'] > $taille_max)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur2");
	 	  	exit();
		  }
		elseif( file_exists($_FILES['photo']['name']) and $height > $taille && $width > $taille)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur3");
	 	  	exit();
		  }

		// Si ficher = bonne taille & bonne extension
   	  	if(!isset($erreur))
       	  {

			$dest_fichier = basename($_FILES['photo']['name']);
			//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 redimensionne l'image
			function resize($image,$sm,$type){
			GLOBAL $image,$sm_largeur,$sm_hauteur;
			$path = ".../wamp/tmp/";

			// obtenir la taille de l'image

			$arr = getimagesize("$path$image.$type");

			// initialisation de la variable largeur

			$largeur=$arr[0];

			// initialisation de la variable hauteur
			$hauteur=$arr[1];


			$facteur=($largeur/$sm);

			// Vérifie si l'image est plus petite que $sm

			if ($largeur < $sm){

			// si vrai retourne les mêmes valeurs d'origine de l'image

			$sm_largeur=$largeur;
			$sm_hauteur=$hauteur;

			// sinon affecte des nouvelles valeurs

			} else {
			$sm_largeur=($largeur/$facteur);
			$sm_hauteur=($hauteur/$facteur);
			}
			}

			$image=$_FILES['photo']['name'];
			$sm=400;
			$type="";

			// appel de la fonction

			resize("$image","$sm","$type");

			// On replace le fichier dans le repertoire final
       		move_uploaded_file($image, $dest_dossier . $_FILES['photo']['name']);

			// On remet a jour la base de donnée
			$valide = "UPDATE `images` SET nom = '".$_FILES['photo']['name']."'  WHERE nom = '".$_POST['pseudo']."' ";
			$test = mysql_query($valide) or die("erreur ! ".mysql_error());

			//Redirection sur page precedente
			header("location: addphoto.php");
		 }
      }else{
		header("location: addphoto.php?erreur4");
	  }

?>
Il faudrait simplement retoucher l'image pour l'avoir a la bonne taille avant l'upload mais je ne sais pas pourquoi il ne me trouve pas mon image dans le dossier temporaire, une idée ? :oops:

par agité » 19 oct. 2006, 17:41

Il existe des classes toutes prêtes qui font ça très bien, fouille un peu sur :google: avec par exemple "PHP Class Thumbnail" ou encore va faire un tour sur PHPClasses, ce serait surprenant que tu ne trouves pas ton bonheur.
Dans le lien que tu donne après quelque recherche je trouve une page qui explique comment redimenssioner l'image : http://phpclasses.goelette.net/browse/file/4571.html

Merci pour le liens et les explications je met la balise [Resolu]

par Cyrano » 19 oct. 2006, 12:31

Il existe des classes toutes prêtes qui font ça très bien, fouille un peu sur :google: avec par exemple "PHP Class Thumbnail" ou encore va faire un tour sur PHPClasses, ce serait surprenant que tu ne trouves pas ton bonheur.

par agité » 19 oct. 2006, 10:19

Deux chose :
- dans les commentaires de ton code, tu as mentionné juste avant d'utiliser move_uploaded_file() "on uploade le fichier" : à ce stade, le fichier est déjà uploadé sur le serveur, mais dans un répertoire temporaire de PHP et cette fonction va le déplacer vers un autre répertoire.
Ok j'avais oublier cette etape dans l'upload de l'image je modifie le texte :)
- C'est à ce moment là que tu peux effectuer un traitement pour redimensionner l'image en utilisant par exemple GD pour la ré-échantilloner.
Ce que je fais personnellement, c'est que je déplace le fichier vers un répertoire temporaire créé à cette fin, j'effectue mes transformations et j'enregistre les nouveaux fichiers dans leur répertoires de destination. Selon le cas, je conserve ou non l'original.
Une fois le traitement effectué, je peux enregistrer les informations en base de données, information retournées par mes fonctions de traitement.
Donc avant de faire mon move_upload_file() je dois redimensionner l'image on vas dire pour un affichage maximum de 800*600, quel commande je dois utiliser ?

par Cyrano » 19 oct. 2006, 08:22

Deux chose :
- dans les commentaires de ton code, tu as mentionné juste avant d'utiliser move_uploaded_file() "on uploade le fichier" : à ce stade, le fichier est déjà uploadé sur le serveur, mais dans un répertoire temporaire de PHP et cette fonction va le déplacer vers un autre répertoire.
- C'est à ce moment là que tu peux effectuer un traitement pour redimensionner l'image en utilisant par exemple GD pour la ré-échantilloner.
Ce que je fais personnellement, c'est que je déplace le fichier vers un répertoire temporaire créé à cette fin, j'effectue mes transformations et j'enregistre les nouveaux fichiers dans leur répertoires de destination. Selon le cas, je conserve ou non l'original.
Une fois le traitement effectué, je peux enregistrer les informations en base de données, information retournées par mes fonctions de traitement.

Redimension avant upload

par agité » 19 oct. 2006, 05:04

Bonjour,

je voudrais avant tout un avis sur la maniere que faire une redimension avant upload de l'image, j'ai un script qui upload les images sans soucis mais je voudrais que celle depassant une certaine taille soit redimensionné.

pour l'instant j'utilise ce script d'upload :
<?php
      require ("connect.php");


      if(isset($_FILES['photo']))

      {
		//parametres
		unset($erreur);
		$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
		$taille_max = 500000;
		$dest_dossier = './images-site/';
		$size = getimagesize("".$_FILES['photo']['tmp_name']);
	 	$height = $size[1];
       	$width = $size[0];
       	$taille = 200;

		// On verrifie les extensions
	 	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	 	  {
	 	  	$erreur = true;
			header("location: addphoto.php?erreur1");
			exit();
		  }
		// On verrifie la taille du fichier
	 	elseif( file_exists($_FILES['photo']['name']) and $_FILES['photo']['size'] > $taille_max)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur2");
	 	  	exit();
		  }
		elseif( file_exists($_FILES['photo']['name']) and $height > $taille && $width > $taille)
	 	  {
	 	  	$erreur = true;
	 	  	header("location: addphoto.php?erreur3");
	 	  	exit();
		  }

		// Si ficher = bonne taille & bonne extension
   	  	if(!isset($erreur))
       	  {

			$dest_fichier = basename($_FILES['photo']['name']);
			//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 upload le fichier
       		move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $_FILES['photo']['name']);

			// On remet a jour la base de donnée
			$valide = "UPDATE `images` SET nom = '".$_FILES['photo']['name']."'  WHERE nom = '".$_POST['pseudo']."' ";
			$test = mysql_query($valide) or die("erreur ! ".mysql_error());

			//Redirection sur page precedente
			header("location: addphoto.php");
		 }
      }else{
		header("location: addphoto.php?erreur4");
	  }

?>
mais j'aimerais savoir a quel moment je dois faire la redimension ?

est ce que je dois le faire dans ma boucle pour la verrification et upload ou avant, tout en debut de script ?