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);
}
?>
Laisser un commentaire
Participez-vous à la discussion?N'hésitez pas à contribuer!