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);
}
?>
0 réponses

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.