PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 21-04-2010 08:53:50

sam01
Membre
Inscription : 28-03-2010
Messages : 7

redimensionner des photo dans mon script

Bonjour à tous,


j'ai le script suivant qui me permet de créer des photo miniature dans un répertoire spécifique, mais il me manque une option importante,

si l'image fait plus de 200 en largeur ou plus de 200pixels en longueur, j'aimerais redimensionner l'image d'origine (en gardant les proportion), en une image de maximum 200 sur 200.

Voic mon script :

  $dest_dossier = 'E:\EasyPHP1-8\www\images\photo\\'.$_SESSION['id_adh'].'\\';
  $dest_dossier_mini = 'E:\EasyPHP1-8\www\images\photo\\'.$_SESSION['id_adh'].'\\mini';


 if(isset($_FILES['up_photo']))
      {
 
     
      unset($erreur);
   
      $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
   
   
    // on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels).
    // En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels,
    // soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).  
   
    $ratio = 50;  
    $ratiobis = 150;  
    // Création des dossiers
 
    if (!file_exists($dest_dossier))
    {
    mkdir ($dest_dossier, 0777);
    }
   
    if (!file_exists($dest_dossier_mini))
    {
    mkdir ($dest_dossier_mini, 0777);
    }
   
    // on compte d'abord le nombre d'image dans le répertoire
   
    $num_images = count_files($dest_dossier);
   
  if ($num_images < 10)
  {
   
   
     // on teste si le champ permettant de soumettre un fichier est vide ou non
    if (empty($_FILES['up_photo']['tmp_name']))
    {
      // si oui, on affiche un petit message d'erreur
      $erreur[] = 'Aucun fichier envoyé.';
    }
    else
    {
   

      // on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier
      //(je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
   
      $tableau = @getimagesize($_FILES['up_photo']['tmp_name']);
     
      if ($tableau == FALSE)
      {
        // si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
        unlink($_FILES['up_photo']['tmp_name']);
        $erreur[] = 'Votre fichier n\'est pas une image.';
         }
       else
       {
 
        // vérifications de l'extention
 
        if( !in_array( substr(strrchr($_FILES['up_photo']['name'], '.'), 1), $extensions_ok ) )
 
        {
          $erreur[] = 'Veuillez sélectionner un fichier de type png, gif ,jpg ou jpeg !';
        }
 
          elseif( file_exists($_FILES['up_photo']['tmp_name'])
 
          and filesize($_FILES['up_photo']['tmp_name']) > $max_size)
 
        {
          $erreur[] = 'Votre fichier doit faire moins de 500Ko !';
        }
   
        // on détremine la taille de la photo
   
        $up_taille = $_FILES['up_photo']['size'];
       
        $dest_fichier = basename($_FILES['up_photo']['name']);// cela donne le même résultat que la commande ==> $_FILES['up_photo']['name'];
       
        // si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
   
        if (is_file($dest_dossier .$_FILES['up_photo']['name']))
        {
            // echo 'dest_fichier = '.$dest_fichier;
          $dest_fichier = '_'.$_FILES['up_photo']['name'];
            // echo 'dest_fichier = '.$dest_fichier;
        }
       
       
        // 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 vérifie si le fichier n'est pas déjà présent :
   
        $chemin_fic = $dest_dossier . $dest_fichier;
     
     
        /*if (file_exists($chemin_fic))
        {
          $dest_fichier = 'DUP'.$dest_fichier;
          echo 'dest_fichier = '.$dest_fichier;
        }*/

        // si l'image n'est ni un jpeg, ni un png, on supprime  le fichier uploadé et on affiche le message d'erreur
         
        if (!($tableau[2] == 2 || $tableau[2] == 3))
        {
           unlink($_FILES['up_photo']['tmp_name']);
           $erreur[] = 'Votre image est d\'un format non supporté. Les formats supportés sont uniquement jpeg et png.';
        }
       
      }
    }
  }
  else
  {
    $erreur[] = 'Vous ne pouvez pas charger plus de 10 photos';
  }
 
      // copie du fichier
 
      if(!isset($erreur))
 
      {
 
      // copie du fichier
 
      if (move_uploaded_file($_FILES['up_photo']['tmp_name'], $dest_dossier . $dest_fichier)) // à ce moment on met le fichier sur le serveur
      {
       
        // On définit la taille maximum du fichier
        // On sépare largeur et hauteur pour faciliter la maintenance
        $max_haut = 200;
        $max_larg = 200;
        // Et on m'enlève ces @ plus dangereux qu'autre chose !!!
        // $tableau = getimagesize($_FILES['up_photo']['tmp_name']);
        $largeur = $tableau[0];
        $hauteur = $tableau[1];
       
        if($largeur > 200 or $hauteur > 200){
        // On calcule le ratio à appliquer. On peut enlever le 1 si on veut agrandir les petites images.
        // Désolé, j'utilise la méthode du ratio <img src="./images/smilies/icon_wink.gif" alt=";-)" title="Wink" />
        $ratiobis = 200;}
        else{
        $ratiobis = 100;}
       
        // Creation de l'image miniature
       
         // si notre image est de type jpeg
        if ($tableau[2] == 2)
        {
          // on crée une image à partir de notre grande image à l'aide de la librairie GD
          $src = imagecreatefromjpeg($dest_dossier.'/'.$dest_fichier);
          // on teste si notre image est de type paysage ou portrait
          if ($tableau[0] > $tableau[1])
          {
            $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
           
            $im_gd = imagecreatetruecolor(round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis);
            imagecopyresampled($im_gd, $src, 0, 0, 0, 0, round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis, $tableau[0], $tableau[1]);
          }
          else
          {
            $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
            imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
           
            $im_gd = imagecreatetruecolor($ratiobis, round(($ratiobis/$tableau[0])*$tableau[1]));
            imagecopyresampled($im_gd, $src, 0, 0, 0, 0, $ratiobis, round($tableau[1]*($ratiobis/$tableau[0])), $tableau[0], $tableau[1]);
          }
          // on copie notre fichier généré dans le répertoire des miniatures
          imagejpeg ($im, $dest_dossier_mini.'/'.$dest_fichier);
         
          imagejpeg ($im_gd, $dest_dossier.'/'.$dest_fichier);
        }
       
        if ($tableau[2] == 3)
        {
          $src = imagecreatefrompng($dir.'/'.$file_upload);
          if ($tableau[0] > $tableau[1])
          {
            $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
            imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
          }
          else
          {
            $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
            imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
          }
          imagepng ($im, $dir_mini.'/'.$file_upload);
        }

Hors ligne

#2 21-04-2010 16:52:30

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : redimensionner des photo dans mon script

Salut,

Méthode :
1. tu calcules la hauteur et la largeur de ta photo source
2. tu vérifies que H < 200 et que L < 200
3. si l'un ou l'autre dépasse, tu fais une règle de 3 (mathématique basique) où 200 est ton 3eme parametres (soit hauteur, soit largeur, en fonction de celui qui dépasse.... si les deux parametres dépassent, alors c'est une petite équation pour définir le coef réducteur) et tu stockes tout ça dans des variables
4. lors de la création de ta photo redimensionnée, tu mets les dimensions en variable et tu y affectes celles crées ci-dessus

Rappel règle de 3


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 21-04-2010 19:25:49

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : redimensionner des photo dans mon script

Bonsoir a tous,

Juste une petite précision sur ce que viens de dire alnoss, il faut appliquer ta réduction en premier sur la dimension la plus grande et la ramener a 200, ainsi tu obtiendra ton coefficient de réduction (ratio) à appliquer sur la deuxième dimension, et ce par le procédé que viens de te donner alnoss.

Dernière modification par Jc (21-04-2010 19:28:02)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums