le MEMO du WEB développeur
••• PHP •••  Liste des Mémos, astuces et bonnes pratiques

Redimensionner une image en PHP

Voici ci dessous le code d'une fonction PHP permettant de redimensionner une image sans la déformer, les paramètres de la fonction sont les suivant :

$source : L'image à redimensionner 
$type_value : Le type correspondant à la valeur fixe définie par le paramètre suivant (W : largeur / H : hauteur)
$new_value : La valeur qui sera fixe (liée à l'argument suivant)
$compression : Le degré de compression (de 0 à 100) $sortie : Si nous souhaitons enregistrer l'image, le chemin du fichier

Fonction de retaillage d'une image 

<?php
function RedimensionnerImage($source, $type_value = "W", $new_value,  $compression = 70, $sortie = "") {
  /*
    Récupération des dimensions de l'image afin de vérifier
    que ce fichier correspond bel et bien à un fichier image.
    Stockage dans deux variables le cas échéant.
  */
  if( !( list($source_largeur, $source_hauteur) = @getimagesize($source) ) ) {
    return false;
  }
  /*
    Calcul de la valeur dynamique en fonction des dimensions actuelles
    de l'image et de la dimension fixe que nous avons précisée en argument.
  */
  if( $type_value == "H" ) {
    $nouv_hauteur = $new_value;
    $nouv_largeur = ($new_value / $source_hauteur) * $source_largeur;
  } else {
    $nouv_largeur = $new_value;
    $nouv_hauteur = ($new_value / $source_largeur) * $source_hauteur;
  }
  /*
 Création du conteneur, c'est-à-dire l'image qui va contenir la version
  redimensionnée. Elle aura donc les nouvelles dimensions.
  */
  $image = imagecreatetruecolor($nouv_largeur, $nouv_hauteur);
  /*
    Importation de l'image source. Stockage dans une variable pour pouvoir
    effectuer certaines actions.
  */
  $source_image = imagecreatefromstring(file_get_contents($source));
  /*
    Copie de l'image dans le nouveau conteneur en la rééchantillonant. Ceci
    permet de ne pas perdre de qualité.
  */
  imagecopyresampled($image, $source_image, 0, 0, 0, 0, $nouv_largeur, $nouv_hauteur, $source_largeur, $source_hauteur);
  /*
    Si nous avons spécifié une sortie et qu'il s'agit d'un chemin valide (accessible
    par le script)
  */
  if(strlen($sortie) > 0 and @touch($sortie)) {
    /*
     Enregistrement de l'image et affichage d'une notification à l'utilisateur.
    */
    imagejpeg($image, $sortie, $compression);
    echo "Fichier sauvegardé.";
  /*
    Sinon...
  */
  } else {
    /*
     ...Nous indiquons au navigateur que nous affichons une image en définissant le
     header et nous affichons l'image.
    */
    header("Content-Type: image/jpeg");
    imagejpeg($image, NULL, $compression);
  }
  /*
    Libération de la mémoire allouée aux deux images (sources et nouvelle).
  */
  imagedestroy($image);
  imagedestroy($source_image);
}
?>

 

publié le 10/06/2013 par Memo Web
Commentaire :
Je vérifie d'abord si le code marche...Merci
par inconnu, le 08/12/2014
Bonne base pour ce que je voulais faire, merci...
par inconnu, le 31/10/2014
marche pas !
par inconnu, le 18/03/2014
Commenter le Mémo :

Affectation conditionnelle sous PHP
Opérations sur les dates en PHP
La superglobale $_SERVER et ses utilisations
Division en PHP - Partie entière
Garder une variable de session après fermeture du navigateur
Connaitre l'heure de son serveur
Bonnes pratiques : Utilisez des simples quotes dans les chaînes PHP
Parcourir les fichiers d'un répertoire en PHP
Lire un fichier .csv et l'enregistrer en base de données Mysql
Parcourir les images d'un répertoire en PHP
Ajoutez vos propres Mémos sur MEMO-WEB

Il suffit de vous créer un compte sur le site

Vous pourrez choisir un thème parmis l'une des catégories proposées par MEMO-WEB.

Rédigez votre Mémo.
Après validation par MEMO-WEB, il sera mis en ligne.
Ajouter vos Mémos