Détection de la taille d'une image [RESOLU]

WRInaute passionné
Si tu souhaite redimentionner une image, en définissant une largeur ou hauteur max, et en gardant les proportions, voici une petite fonction:

Code:
function resize($image , $largeur_max , $hauteur_max , $source , $destination , $prefixe){
 if (!file_exists($source.$image)) {
  echo "L'image $source$image n'existe pas";
  exit;
  }
 
  // On verifie que l'extention du fichier est bien une image jpg, jpeg ou gif
  $ext=strtolower(strrchr($image, '.'));
  if ($ext!=".jpg" AND $ext!=".jpeg" AND $ext!=".gif"){
  echo "<br>Votre image doit être un jpg, jpeg ou gif <br>";
  exit;
  }
 
  $size = getimagesize($source.$image);
 
  $largeur_src=$size[0];
  $hauteur_src=$size[1];
 
  //2ieme verification -> on verifie que le type du fichier est un jpg, jpeg ou gif
  // $size[2] -> type de l'image : 1 = GIF , 2 = JPG, JPEG
  if ($size[2]!=1 AND $size[2]!=2){
  echo "<br>Format non supporté<br>";
  exit;
  }
 
  if($size[2]==1){ // format gif
  $image_src=imagecreatefromgif($source.$image);
  }
 
  if($size[2]==2){ // format jpg ou jpeg
  $image_src=imagecreatefromjpeg($source.$image);
  }
 
 
  // on verifie que l'image source ne soit pas plus petite que l'image dedestination
  if ($largeur_src>$largeur_max OR $hauteur_src>$hauteur_max){
  // si la largeur est plus grande que la hauteur
  if ($hauteur_src<=$largeur_src){
  $ratio=$largeur_max/$largeur_src;
  }else{
  $ratio=$hauteur_max/$hauteur_src;
  }
  }else{
  $ratio=1; // l'image créee sera identique à l'originale
  }
 umask(022);
  $image_dest=imagecreatetruecolor(round($largeur_src*$ratio),
round($hauteur_src*$ratio));
  imagecopyresized($image_dest, $image_src, 0, 0, 0, 0,
round($largeur_src*$ratio), round($hauteur_src*$ratio), $largeur_src, $hauteur_src);
  if(!imagejpeg($image_dest, $destination.$prefixe.$image)){
  echo "la création de l'image a echouée pour l'image $image";
  chmod ('../articles/img/'.$prefixe.''.$image.'', 0777);
  exit;
  }
  else
  {
  echo 'la création de l\'image a fonctionné pour l\'image '.$destination.''.$prefixe.''.$image.' <br /> Pour la placer a droite dans l\'article: <br />[imgdroite]'.$prefixe.''.$image.'[/img]<br><br>Pour la placer a droite dans l\'article: <br />[imggauche]'.$prefixe.''.$image.'[/img]';
  exit;
  }
}

Et le script qui vas avec (je ne fais pas le détails, ce script propose de redmentionner une image selon trois gabarits de taille max...

Code:
<?php
include "../mainfile.php"; //fichier de conf, avec toutes les fonctions...

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

$target     = "../articles/source/";  // Repertoire cible
$max_size   = 10000000;     // Taille max en octets du fichier
$width_max  = 10000000;        // Largeur max de l'image en pixels
$height_max = 10000000;        // Hauteur max de l'image en pixels

$extensions_ok = array("jpg","gif","png","jpeg");
//------------------------------------------------------------
//  DEFINITION DES VARIABLES LIEES AU FICHIER
//------------------------------------------------------------

$nom_file   = $_FILES['fichier']['name'];
$taille     = $_FILES['fichier']['size'];
$tmp        = $_FILES['fichier']['tmp_name'];
$chemin     = $target.$_FILES['fichier']['name'];

$extension  = substr($nom_file,-3); // Récupération de l'extension


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

if($_POST['posted'])
{

// On vérifie si le champ est rempli

  if($_FILES['fichier']['name'])
  {
     // On vérifie l'extension du fichier

    if(in_array(strtolower($extension),$extensions_ok))
    {
       // On récupère les dimensions du fichier

        $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
            
        // On vérifie les dimensions et taille de l'image

        if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($taille <= $max_size))
        {
           // Si c'est OK, on teste l'upload

            if(move_uploaded_file($tmp,$chemin))
            {

              // Si upload OK alors on affiche le message de réussite
                echo '<p>Image uploadée avec succès !</p>';
                echo '<ul><li>Fichier : '.$_FILES['fichier']['name'].'</li>';
                echo '<li>Taille : '.$_FILES['fichier']['size'].' Octets</li>';
                echo '<li>Largeur : '.$infos_img[0].' px</li>';
                echo '<li>Hauteur : '.$infos_img[1].' px</li></ul>';
				chmod ('../articles/source/'.$_FILES['fichier']['name'].'', 0777);
               
            }
               else
            {

               // Sinon on affiche une erreur système
                echo '<p>Problème lors de l\'upload !</p>';
                
            }
        }
          else
        {

          // Sinon erreur sur les dimensions et taille de l'image
          echo '<p>Erreur dans les dimensions ou taille de l\'image !</p>';
        }
    }
      else
    {

      // Sinon on affiche une erreur pour l'extension
        echo '<p>Votre image ne comporte pas une extension valide !</p>';
        
    }
   }
    else
   {

    // Sinon on affiche une erreur pour le champ vide
    echo '<p>Le champ du formulaire est vide !</p>';
   }
}

									
		if (isset($_POST['taille'])){
		
$taille = $_POST['taille'];
if ($taille == a)
{
$larg = 260;
$haut = 200;
echo "Taille choisit: A<br />";
}
elseif ($taille == b)
{
$larg = 200;
$haut = 150;
echo "Taille choisit: B<br />";
}
elseif ($taille == c)
{
$larg = 230;
$haut = 175;
echo "Taille choisit: B<br />";
}
else
{
echo "Erreur de taille >>";
}
$number = mysql_query("SELECT id FROM articles ORDER BY id DESC LIMIT 0, 1");
list($id) = mysql_fetch_array($number);
$prefix = $id+1;
$prefi = ''.$prefix.'_';
$desti = "../articles/img/";
$sourc = '../articles/source/';
$limage = $_FILES['fichier']['name'];

resize($limage , $larg , $haut , $sourc , $desti , $prefi);
								}
?>
<html>
<head>
<title>Upload d'une image sur le serveur !</title>
</head>
<body>
<form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<p>Envoyer le fichier :</p>
<input type="hidden" name="posted" value="1">
<input name="fichier" type="file">

<select name="taille">	
<OPTION value="a">Taille grande (a)
<OPTION value="b">Taille petite (b)
<OPTION value="c">Taille moyenne (c)
</select>

<input type="submit" value="Uploader">
</form><br>
<img src="A.gif" width="260" height="200"> <img src="C.gif" width="230" height="175"> <img src="B.gif" width="200" height="150">
</body>
</html>
 
WRInaute passionné
Petite note sur le script ci-dessus: c'est le script d'un backoffice d'un de mes sites, il permet de redimentionner l'image, et donne le code a la fin pour placer l'image dans l'article, car je ne suis pas le seul a utiliser le backoffice.

Il permet également de mettre un numéro à l'image, le numéro de l'article courrant, d'ou la petite requete sql.

Bref, j'aurai pu le simplifier pour le mettre ici, mais j'ai un peu la fleme, et puis ce script ne répond p'tet pas a ta question...

Donc voila

Edit: ce script ne convient que pour un backoffice, est doit etre adapté si on veux l'utiliser publiquement.
Ce script est codé a la truelle, je l'admet lol
 
WRInaute passionné
De rien, je suis en forme aujourd'hui pour poster sur WRI lol ^^ ça aurais été un autre jours j'aurais jamais pris le temps de balancer ça...

Puis en plus t'es un ami de fred, donc... ^^
 
Discussions similaires
Haut