Page 1 sur 1

Comment redimensionner une image proportionnellement

Posté : 19 oct. 2008, 01:47
par alaingpl
Bonjour à tous,
Je souhaite redimensionner des images uploadées mais de façon proportionnelle pour me rapprocher le plus possible de dimensions définies : en x 250 et y 375. Est ce possible et si oui comment fait on car je n'ai pas trouvé de solution ?
Quelqu'un peut il m'aider, me mettre sur la piste, m'indiquer un tuto ou un post correspondant car je n'ai rien trouvé. Merci d'avance de l'aide.

Ci - dessous le code actuel
//----code pour le redimensionnement des photos 

$source = imagecreatefromjpeg($_FILES['photo']['tmp_name']); // La photo est la source 
$destination = imagecreatetruecolor(250, 375); // On crée la miniature vide 

// 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 miniature 
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); 

// On enregistre la miniature sous le nom "mini_couchersoleil.jpg" 
imagejpeg($destination, ($_FILES['photo']['tmp_name'])); 

//----fin du code pour le redimensionnement du code

Posté : 19 oct. 2008, 02:36
par sylvaing26
<?
$page = $result[page];
$photo = $result[photo];
$filename = "../catalogue/img/P$page/Images/mini_$photo";
if (!file_exists($filename)) {
$source = "../catalogue/img/P$page/Images/$photo"; 
    $ImageChoisie = imagecreatefromjpeg($source);
    $TailleImageChoisie = getimagesize($source);
if($TailleImageChoisie[0]>$TailleImageChoisie[1])
{
//Etape 1 :
$NouvelleLargeur = 90;
 
//Etape 2 :
$Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] );
 
//Etape 3 :
$NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 );
}
else
{
//Etape 1 :
$NouvelleHauteur = 90;
 
//Etape 2 :
$Reduction = ( ($NouvelleHauteur * 100)/$TailleImageChoisie[1] );
 
//Etape 3 :
$NouvelleLargeur = ( ($TailleImageChoisie[0] * $Reduction)/100 );
}
//Etape 1 :
$NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");



 
//Etape 2 :
imagecopyresampled($NouvelleImage , $ImageChoisie, 0, 0, 0, 0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
$background_color = imagecolorallocate ($NouvelleImage, 255, 255, 255);
imagefill($NouvelleImage,0,0,$background_color);
//////////////////

$miniature = "mini_$photo";  
$destination = $source = "../catalogue/img/P$page/Images/$miniature";
ImageJpeg ($NouvelleImage,$destination, 100); 
}   
else
{
$miniature = "mini_$photo";
}
?>

Re: Comment redimensionner une image proportionnellement

Posté : 19 oct. 2008, 04:33
par AB
Bonjour à tous,
Je souhaite redimensionner des images uploadées mais de façon proportionnelle pour me rapprocher le plus possible de dimensions définies : en x 250 et y 375. Est ce possible et si oui comment fait on car je n'ai pas trouvé de solution ?
Le pb c'est que si tes images originales ne font pas le rapport x/y que tu as défini tes images vont être déformées.
Habituellement ont choisi de faire un redimensionnement en fonction de largeurs et de hauteurs maximales acceptables.

Ci dessous un extrait de code "standard" pour ce redimensionnement proportionnel ($largeur_max et $hauteur_max étant définies par toi-même ou dans un formulaire et on doit au préalable vérifier qu'elle sont > 0, $adres l'adresse de ton fichier image).
$source = imagecreatefromjpeg($adres); 
								
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
								
if ($source !== false) 
{							
//REDIMENSIONNEMENT si la hauteur ou la largeur de l'image dépasse la largeur ou la hauteur maximale souhaitée.
if ((isset($largeur_max,$hauteur_max) && $largeur_source > 0 && $hauteur_source > 0)  && ($largeur_source > $largeur_max || $hauteur_source > $hauteur_max))
	
  {
										
  $ratio_orig = $largeur_source/$hauteur_source;
			
  if ($largeur_max/$hauteur_max > $ratio_orig) 
		{
		$largeur_destination = $hauteur_max*$ratio_orig;
		$hauteur_destination = $hauteur_max;
		} 
		else 
		{
		$hauteur_destination = $largeur_max/$ratio_orig;
		$largeur_destination = $largeur_max;
		}
  // Création de l'image vide de destination
  $destination = imagecreatetruecolor($largeur_destination, $hauteur_destination);
  // etc.

Posté : 19 oct. 2008, 11:41
par alaingpl
Merci à tous de m'avoir aidé et particulièrement à sylvaing26 à qui j'ai emprunté son code.
Pour ceux à qui ce code pourrait servir, ce dernier comporte des erreurs mais fonctionne. Il sert à télécharger des images en écrivant son "chemin" dans une bd tout en les redimensionnants proportionnellement en gardant le nom du fichier d'origine sans les accents et les espaces. L'image "physique" se trouve stockée dans un dossier

<?php 

// je réceptionne le formulaire et indique le répertoire de destination//
if(isset($_FILES['photo'])){  $dest_dossier = 'imag_accueil/';  


//paramétres//
unset($erreur);  
$extensions_ok = array('jpg', 'jpeg'); 
 $taille_max = 500000;
// vérifications
  if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
  {
    $erreur = 'Veuillez sélectionner un fichier de type jpeg ou jpg !';  
  }
  elseif( file_exists($_FILES['photo']['tmp_name']) 
          and filesize($_FILES['photo']['tmp_name']) > $taille_max)
  {
    $erreur = 'Votre fichier doit faire moins de 500Ko !';
  }
  if(!isset($erreur))
  
 // redimensionnement proportionnelle des images
  {

$source = ($_FILES['photo']['tmp_name']) ;  
    $ImageChoisie = imagecreatefromjpeg($source); 
    $TailleImageChoisie = getimagesize($source); 
if($TailleImageChoisie[0]>$TailleImageChoisie[1]) 
{ 
//Etape 1 : 
$NouvelleLargeur = 250; 
  
//Etape 2 : 
$Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] ); 
  
//Etape 3 : 
$NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 ); 
} 
else 
{ 
//Etape 1 : 
$NouvelleHauteur = 375; 
  
//Etape 2 : 
$Reduction = ( ($NouvelleHauteur * 100)/$TailleImageChoisie[1] ); 
  
//Etape 3 : 
$NouvelleLargeur = ( ($TailleImageChoisie[0] * $Reduction)/100 ); 
} 
//Etape 1 : 
$NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur"); 



  
//Etape 2 : 
imagecopyresampled($NouvelleImage , $ImageChoisie, 0, 0, 0, 0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]); 
$background_color = imagecolorallocate ($NouvelleImage, 255, 255, 255); 
imagefill($NouvelleImage,0,0,$background_color); 
////////////////// 

$miniature = ($_FILES['photo']['tmp_name']);   
$destination = $source = ($_FILES['photo']['tmp_name']); 
ImageJpeg ($NouvelleImage,$destination, 100);  
}    
else 
{ 
$miniature = ($_FILES['photo']['tmp_name']); 
} 
// fin du redimensionnement proportionnelle des images
  {
// il est copié du temporaire vers mon répertoire//

			
 $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-1]+)/i', '_', $dest_fichier);
	
  move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
  }
  }
  {
  echo'<br><br><center><a href="../admin/index.php">Insérer de nouvelles photos</a></center>';
  }
 ?>
 <?php
 require("admin/config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
//je réceptionne le nom du fichier et son chemin//
if(isset($_FILES['photo']['name']))      $FILES=$_POST['url'];

else      $_FILES="";


// je l'écris dans le champ chemin-fichier//
	
	$sql = "INSERT INTO imag_accueil(url,chemin_fichier) VALUES('". $imag ."', '". $dest_dossier . $dest_fichier ."')";
	
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

	mysql_query("SELECT * FROM $url");
  
header("location:admin/index.php") ;
 
?>