PHP

Compression d'image ou redimmension

Résolu

Bonjour,


Je souhaiterai pour le système d'upload d'avatar que j'ai sur mon site, pouvoir réduire la qualité des images voir les redimenssioner si ca peut les alléger ! Voici mon compte


  $req = $pdo->prepare("INSERT INTO annonces SET categorie = ?, titre = ?, prix = ?, ville = ?, description = ?, drive = ?, date_time_publication = NOW(), id_posteur = ?, prenom = ?, nom = ?");
  $req->execute([$_POST['categorie'], $_POST['article_titre'], $_POST['article_prix'], $_POST['ville'], $_POST['article_contenu'],$_POST['drive'], $_SESSION['auth']->id, $_SESSION['auth']->prenom, $_SESSION['auth']->nom]);
        if(!empty($_FILES['avatar']['name'])){
          $id_avatar = $pdo->lastInsertId();
          $tailleMax = 12097152;
          $extensionValides = array('jpg', 'jpeg', 'png');
          if($_FILES['avatar']['size'] <= $tailleMax){
            $extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
            if(in_array($extensionUpload, $extensionValides)){
              $chemin = "annonces/photos/".$id_avatar.".".$extensionUpload;
              $resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
              $av = $id_avatar.".".$extensionUpload;
                require_once 'inc/db.php';
                $pdo->prepare('UPDATE annonces SET photo = ? WHERE id = ?')->execute([$av, $id_avatar]);
                header('Location: ads.php');
                $_SESSION['flash']['green2'] = 'Votre annonce a bien été publié';
              }else{ $_SESSION['flash']['red2'] = "Erreur durant l'importation de votre photo"; }
            }else{ $_SESSION['flash']['red2'] = "Votre photo de profil doit être au format jpg, jpeg ou png."; }
        }


Merci si vous parvenez a m'aidez !

542 vues
25 avril 2020 à 16:28 (Édité)
Cette pub permet au site de vivre ...

Re:


Bon on va faire simple 😉

Normalement tu as déjà un répertoires d'images avec toutes tes images dedans 😉

Ce que tu vas faire c'est créer une fonction compressImage() pour compresser les images JPEG, PNG et GIF 😉


La fonction prend 3 paramètres :


  1. Source
  2. Destination
  3. Qualité des fichiers


Appelle imagecreatefromjpeg($source), imagecreatefromgif($source), et imagecreatefrompng($source) pour créer une nouvelle image selon la valeur $info['mime'].

Exécute la méthode imagejpeg() pour stocker l'image à la destination. Ici, le troisième paramètre qualité est optionnel. Il prend une valeur de 0 à 100 et la valeur par défaut est 75.

Définis l'emplacement du répertoire des images et vérifie l'extension du fichier. Si elle est valide, appelle la fonction compressImage() où tu passeras $_FILES['imagefile'], ['tmp_name'], $location, et 60.


Voilà en gros le code que tu devrais avoir :


<?php
if(isset($_POST['upload'])){

  // Getting file name
  $filename = $_FILES['imagefile']['name'];
 
  // Valid extension
  $valid_ext = array('png','jpeg','jpg');

  // Location
  $location = "images/".$filename;

  // file extension
  $file_extension = pathinfo($location, PATHINFO_EXTENSION);
  $file_extension = strtolower($file_extension);

  // Check extensionif(in_array($file_extension,$valid_ext)){

    // Compress Image
    compressImage($_FILES['imagefile']['tmp_name'],$location,60);

  }else{
    echo "Type de fichier non valide.";
  }
}

// Compress image
function compressImage($source, $destination, $quality) {

  $info = getimagesize($source);

  if ($info['mime'] == 'image/jpeg') 
    $image = imagecreatefromjpeg($source);

  elseif ($info['mime'] == 'image/gif') 
    $image = imagecreatefromgif($source);

  elseif ($info['mime'] == 'image/png') 
    $image = imagecreatefrompng($source);

  imagejpeg($image, $destination, $quality);

}
?>
Cette pub permet au site de vivre ...

4 commentaires

Super, merci beaucoup @Jerem971 !😃

Je viens de l'adapter a mon code actuel ça fonctionne parfaitement :) je passe d'une photo de 1,60mb a 520kb en compression 50 😃

Re:


Bon on va faire simple 😉

Normalement tu as déjà un répertoires d'images avec toutes tes images dedans 😉

Ce que tu vas faire c'est créer une fonction compressImage() pour compresser les images JPEG, PNG et GIF 😉


La fonction prend 3 paramètres :


  1. Source
  2. Destination
  3. Qualité des fichiers


Appelle imagecreatefromjpeg($source), imagecreatefromgif($source), et imagecreatefrompng($source) pour créer une nouvelle image selon la valeur $info['mime'].

Exécute la méthode imagejpeg() pour stocker l'image à la destination. Ici, le troisième paramètre qualité est optionnel. Il prend une valeur de 0 à 100 et la valeur par défaut est 75.

Définis l'emplacement du répertoire des images et vérifie l'extension du fichier. Si elle est valide, appelle la fonction compressImage() où tu passeras $_FILES['imagefile'], ['tmp_name'], $location, et 60.


Voilà en gros le code que tu devrais avoir :


<?php
if(isset($_POST['upload'])){

  // Getting file name
  $filename = $_FILES['imagefile']['name'];
 
  // Valid extension
  $valid_ext = array('png','jpeg','jpg');

  // Location
  $location = "images/".$filename;

  // file extension
  $file_extension = pathinfo($location, PATHINFO_EXTENSION);
  $file_extension = strtolower($file_extension);

  // Check extensionif(in_array($file_extension,$valid_ext)){

    // Compress Image
    compressImage($_FILES['imagefile']['tmp_name'],$location,60);

  }else{
    echo "Type de fichier non valide.";
  }
}

// Compress image
function compressImage($source, $destination, $quality) {

  $info = getimagesize($source);

  if ($info['mime'] == 'image/jpeg') 
    $image = imagecreatefromjpeg($source);

  elseif ($info['mime'] == 'image/gif') 
    $image = imagecreatefromgif($source);

  elseif ($info['mime'] == 'image/png') 
    $image = imagecreatefrompng($source);

  imagejpeg($image, $destination, $quality);

}
?>

Merci pour ta reponse @Jerem971

j'ai déjà fait un tour sur c'est liens mais pour moi la doc php.net j'y comprend rien dessus... 😅

Hello @bykertix,


Je ne sais pas si ce lien et ce lien pourrait t'aider... 🤔

Cette pub permet au site de vivre ...