8791 sujets

Développement web côté serveur, CMS

Slt
j'ai un formulaire avec divers champs qui me permettent de saisir une reference ainsi qu'une image à uploader.

Comme les personnes qui vont se servir de ce formulaire ne sont pas des pros du redimensionnement d'images.

Je voudrais que lors du traitement du formulaire cela redimensionne l'image avant de l'uploader sur le serveur au dimensions que j'aurais fixer tous en gardant le ratio LxH.

Je vous met un bout de code qui pour l'instant utilise des tailles et poids limitées car je ne peux pas faire autrement.
Mais des que l'image pourras etre redimensioner avant l'upload ca devrait le faire.


$ext=".jpg";
$alea=time();
$fin=$alea.$ext;
$ladate=time();

//---------------------------- 
// DEFINITION DES VARIABLES 
//---------------------------- 

$target = './photosref/'; // Repertoire cible 
$extension = 'jpg'; // Extension du fichier sans le . 
$max_size = 100000; // Taille max en octets du fichier 
$width_max = 400; // Largeur max de l'image en pixels 
$height_max = 400; // Hauteur max de l'image en pixels 

//--------------------------------------------- 
// DEFINITION DES VARIABLES LIEES AU FICHIER 
//--------------------------------------------- 

$nom_file = $_FILES['photo']['name']; 
$taille = $_FILES['photo']['size']; 
$tmp = $_FILES['photo']['tmp_name']; 

//---------------------- 
// SCRIPT D'UPLOAD 
//---------------------- 

if(!empty($_POST['posted'])) { 
// On vérifie si le champ est rempli 
if(!empty($_FILES['photo']['name'])) { 

// On vérifie l'extension du fichier 
if(substr($nom_file, -3) == $extension) { 
// On récupère les dimensions du fichier 
$infos_img = getimagesize($_FILES['photo']['tmp_name']); 

// On vérifie les dimensions et taille de l'image 
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['photo']['size'] <= $max_size)) { 
// Si c'est OK, on teste l'upload 
if(move_uploaded_file($_FILES['photo']['tmp_name'],$target.$fin.$_FILES['name'])) { 
// Si upload OK alors on affiche le message de réussite 

$db = mysql_connect($cfgHote , $cfgLogin , $cfgPwd )  or die('Erreur de connexion '.mysql_error());
mysql_select_db($cfgBase, $db)  or die('Erreur de selection '.mysql_error()); 

$sql = "INSERT INTO ....................................


Comme j'ai aucune idée de comment procéder, si qql'un pouvais me donner un bout de code ou des infos c'est serait bien cool.

Merci@+
Modifié par spawns (21 Sep 2008 - 15:41)
Il faudrait regarder du côté des applets Java (mais ça suppose que le plugin Java soit installé chez l'internaute).
Autrement, redimmensionnement côté serveur, donc après upload, ou écrire un tutoriel pour un programme tel que XnView pour leur permettre de redimmensionner facilement en suivant une MàS pas à pas.
Modifié par superjun (21 Sep 2008 - 17:20)
Je pense pourtant avoir deja vu ce style de code
mais je ne sais plus trop ou ....

Je continue à chercher
Hello,

Tu devrai commencer par vérifier que ton image est correctement uploadée temporairement sur le serveur (is_uploaded_file).

Ensuite, pour redimensionner une image, il te faut en créer une nouvelle, aux nouvelles dimensions avec imagecreatetruecolor par exemple.

Puis il te faut récuperer une ressource de ton image de base avec imagecreatefromgif, imagecreatefrompng, imagecreatefromjpeg en fonction de ton format de base et copier cette image dans ton image vide, en la redimensionnant avec imagecopyresampled

Puis, il ne te reste plus qu'à enregistrer cette nouvelle image sur ton disque avec imagegif, imagepng ou imagejpeg selon le cas (et vider la mémoire des deux images créées avec imagedestroy)

Je te laisse jeter un oeil du coté de ces fonctions et de leurs arguments sur php.net ainsi que de faire le calcul mathématique pour retrouver les dimensions de la nouvelle image qui lui garde ses proportions (tu peux trouver les dimensions d'une image avec getimagesize)

En code simplifié, ça donne quelque chose comme


list($originalWidth, $originalHeight) = getimagesize($filepathOriginalImg);
(... Calcul pour trouver $newWidth et $newHeight, les dimensions de la nouvelle image, redimensionnée ...)
$originalImage = imagecreatefromjpeg($filepathOriginalImg);
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newImage, $originalImage , 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight);
imagejpeg($newImage, $filepathNewImg, 90);


En esperant t'avoir donné quelques pistes
Oui mais sa solution, reste du coté serveur. Il faut tout de meme que l'image uploader soit temporairement sur le serveur pour faire son traitement de redimensionnement d'image !
La solution de Kossos est bonne car elle n'utilise pas Java mais Flash.
Java c'est bien mais ca pose quand même deux soucis de taille:
- la JVM n'est pas installé sur toutes les machines, la procédure d'installation est lourde (surtout sur certains navigateur).
- les applets qui accèdent au disque du client doivent êtres signées par un organisme de confiance (sinon il y a des messages d'erreurs de l'autre monde)
Flash par contre n'a pas ces inconvénients.