redimenssionner une image lors de l'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 : redimenssionner une image lors de l'upload.

Re: redimenssionner une image lors de l'upload.

par fabrice88250 » 24 sept. 2009, 09:56

bonjour et merci pour vos réponses.

j'ai essayé d'adapté le code pour redimenssionner l'image apres l'upload mais sa fonctionne pas. l'image garde sa taille d'origine. pourquoi ?
//ON TRAITE LA PARTIE PHOTO REF
	$nomOrigine = $_FILES['photoref']['name'];
	$elementsChemin = pathinfo($nomOrigine);
	$extensionFichier = $elementsChemin['extension'];
	$extensionsAutorisees = array("jpeg", "jpg", "gif", "png", "JPG");
	if (!(in_array($extensionFichier, $extensionsAutorisees))) 
	{
		echo "<div class='erreur'>Le fichier Référence photo n'a pas l'extension attendue</div>";
	} 
	else 
	{    
		// Copie dans le repertoire du script avec un nom
		// incluant l'heure a la seconde pres 
		$repertoireDestination = "../../images/galerie/";
		$nomDestination = $nomOrigine."fichier_du_".date("Ymd").".".$extensionFichier;
	
		if (move_uploaded_file($_FILES["photoref"]["tmp_name"], $repertoireDestination.$nomDestination)) 
		{
			
$file = $nomDestination ; # L'emplacement de l'image à redimensionner. L'image peut être de type jpeg, gif ou png 

$x = 800; 

$y = 600; # Taille en pixel de l'image redimensionnée 

$size = getimagesize($file); 

if ( $size) { 
echo 'Image en cours de redimensionnement... 
'; 

if ($size['mime']=='image/jpeg' ) { 
$img_big = imagecreatefromjpeg($file); # On ouvre l'image d'origine 
$img_new = imagecreate($x, $y); 
# création de la miniature 
$img_mini = imagecreatetruecolor($x, $y) 
or   $img_mini = imagecreate($x, $y); 

// copie de l'image, avec le redimensionnement. 
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); 

imagejpeg($img_mini,$file ); 

} 
elseif ($size['mime']=='image/png' ) { 
$img_big = imagecreatefrompng($file); # On ouvre l'image d'origine 
$img_new = imagecreate($x, $y); 
# création de la miniature 
$img_mini = imagecreatetruecolor($x, $y) 
or   $img_mini = imagecreate($x, $y); 

// copie de l'image, avec le redimensionnement. 
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); 

imagepng($img_mini,$file ); 

} 
elseif ($size['mime']=='image/gif' ) { 
$img_big = imagecreatefromgif($file); # On ouvre l'image d'origine 
$img_new = imagecreate($x, $y); 
# création de la miniature 
$img_mini = imagecreatetruecolor($x, $y) 
or   $img_mini = imagecreate($x, $y); 

// copie de l'image, avec le redimensionnement. 
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); 

imagegif($img_mini,$file ); 

} 
echo 'Image redimensionnée ! 
'; 
} 
			
			
			
			
			echo "La photo est bien enregistrée <br/>";
		} 
		else 
		{
			echo "Le fichier n'a pas été uploadé (trop gros ?) ou ".
				 "Le déplacement du fichier temporaire a échoué".
				 " vérifiez l'existence du répertoire ".$repertoireDestination;
		}
	}
	
	
	

Re: redimenssionner une image lors de l'upload.

par FuZZyLine » 24 sept. 2009, 09:20

Salut,
bonjour,
pour ma galerie photos, j'upload mes images depuis un formulaire (une photo a la fois pour le moment).
l'upload fonctionne bien mais j'ai cependant un soucis.
je souhaiterai lorsque j'upload mon image la redimenssionner avec comme dimenssions maxi 800 x 600.
j'ai fais quelques essai avec getimagesize pour recuperer les dimenssions... mais je n'arrive pas a redimensionner afin que mon image soit un fois uploader en maxi 800 x 600 tout en gardant les proprtion de l'image pour pas qu'elle ne soit deformer.
mon code upload est our l'instant :
[...]
je voudrait donc ajouter a ce code un fonction qui redimenssion l'image. :?
Intro (HS) :
Le problème est qu'à partir d'une qualité d'image donnée tu ne peux en aucun cas augmenter cette
qualité ou bien meme la conserver si tu augmentes les dimensions de cette image. Par exemple si
tu veux passer une image de 80*60 en 800*600 (pas taper, c'est un exemple) le résultat sera: beurk!

La raison: Le pixel...
La solution serait d'appeller ton image (une fois chargée sur le serveur), la verctoriser, appliquer la
nouvelle dimension, la reconvertir en png et l'enregistrer. La, la qualité serait gardée bien que les couleurs
seront un peu en berne.

---

Tu ne peux redimentionner une image que tu n'as pas encore Upload.

Pour les dimensions il sufit de prendre la hauteur de base DIV par hauteur d'arrivée et d'appliquer
le même résultat à la longueur. (ou inversement en partant de la longueur) C'est juste une histoire de %.
Faut juste, en plus, que tu testes le MAX_HAUTEUR et MAX_LONGUEUR que tu auras déclaré.

@+ bon code ;)

PS: J'utilise Inkscape mais le traitement je le fais offline donc je peux pas te renseigner sur des lib php
qui font le travail en direct, dsl.

Re: redimenssionner une image lors de l'upload.

par AB » 23 sept. 2009, 23:55

Tu trouveras de nombreuses réponses avec les termes "redimensionnement photo" dans le moteur de recherche de ce site (menu "Rechercher" à côté de "FAQ") :wink:

Re: redimenssionner une image lors de l'upload.

par fabrice88250 » 23 sept. 2009, 21:12

Bonsoir merci pour cette réponse.
L’idée de redimensionner l'image âpres l'upload me tante pas spécialement car sa va prendre de la place sur mon hébergeur et comme j'ai énormément de photos à mettre je risque de saturé a cause des double (originaux et redimensionner) de plus le originaux j'ai un sauvegarde sur mon pc donc pas besoin sur ftp.

en fait je voudrai que mon image soit redimensionner dès l'upload proportionnellement avec un largeur max de 800 par exemple et un auteur max de 600px afin de n'enregistrer que l'image final de 800 max x 600 max..

j'ai regardé ton lien mais je ne voi aps comment l'adapter a mon scipt.

Re: redimenssionner une image lors de l'upload.

par Dr@ke » 22 sept. 2009, 16:15

Je pense que ce lien répond à ce que tu aimerais faire:
http://www.tayo.fr/redimensionner-une-i ... p-aide.php

Maintenant pour l'appliquer, je pense que le plus simple et le plus safe, est dans un premier temps d'uploader l'image.
Ensuite faire le redimensionnement.
Puis enregistrer l'image sous un nom différent.
De cette façon tu gardes l'original en cas de bug, tu ne gênes en rien l'upload et tu ne le ralentis pas non plus.
Par contre cela te fait des images en doubles, mais qui peuvent être supprimées ensuite après accord de l'uploadeur par exemple...

[EDIT]
Je pense aussi malheureusement, que quelque-soit la méthode que tu choisiras, la qualité de la redimension sera limitée par les dimensions originales de l'image.
Surtout quand les dimensions originales ne sont pas à l'échelle de te ton redimensionnement.
Il est peut-être plus simple de demander, vérifier ou imposer une dimension particulière avant l'upload.
Surtout quand elles ne sont pas à l'échelle...

redimenssionner une image lors de l'upload.

par fabrice88250 » 22 sept. 2009, 15:31

bonjour,
pour ma galerie photos, j'upload mes images depuis un formulaire (une photo a la fois pour le moment).
l'upload fonctionne bien mais j'ai cependant un soucis.
je souhaiterai lorsque j'upload mon image la redimenssionner avec comme dimenssions maxi 800 x 600.
j'ai fais quelques essai avec getimagesize pour recuperer les dimenssions... mais je n'arrive pas a redimensionner afin que mon image soit un fois uploader en maxi 800 x 600 tout en gardant les proprtion de l'image pour pas qu'elle ne soit deformer.

mon code upload est our l'instant :
// je recupere les info de mon formulaire
$type = $_POST['type'];
$ref = $_POST['ref'];
$alt = $_POST['alt'];
	
	
	//Je traite la partie PHOTO REF
	$nomOrigine = $_FILES['photoref']['name'];
	$elementsChemin = pathinfo($nomOrigine);
	$extensionFichier = $elementsChemin['extension'];
	$extensionsAutorisees = array("jpeg", "jpg", "gif", "png", "JPG");
	if (!(in_array($extensionFichier, $extensionsAutorisees))) 
	{
		echo "<div class='erreur'>l'image n'a pas l'extension attendue</div>";
	} 
	else 
	{    
		// Copie de l'image dans le repertoire que je definit avec repertoireDestination 
		// incluant l'heure a la seconde pres 
		$repertoireDestination = "../../images/galerie/";
		$nomDestination = $nomOrigine."fichier_du_".date("Ymd").".".$extensionFichier;
	
		if (move_uploaded_file($_FILES["photoref"]["tmp_name"], $repertoireDestination.$nomDestination)) 
		{
			echo "La photo est bien enregistrée <br/>";
		} 
		else 
		{
			echo "L'image n'a pas été uploadée (trop gros ?) ou ".
				 "Le déplacement de l'image temporaire a échoué".
				 " Vérifiez l'existence du répertoire ".$repertoireDestination;
		}
	}
je voudrait donc ajouter a ce code un fonction qui redimenssion l'image. :?