Faire des vignettes jpeg automatiques avec redimensionnement

1/5 (37 avis)

Vue 21 135 fois - Téléchargée 1 668 fois

Description

Ce script vous permettra de créer des vignettes pour des aperçu d'images en paramétrant la hauteur et la largeur, ainsi que la qualité de compression, tout en laissant l'image proportionelle .

Compatibilité :
  • Utilisation de la bibliothéque GD (toutes versions)
  • PHP 3.0.16, PHP 4 ou +


Indications pour l'utilisation de cette fonction dans votre site :

Recopiez le code si-dessous, puis mettez-le dans la page dans laquelle vous recevrez le champ image et que vous voulez la redimensionner. Si vous utilisez cette fonction dans plusieures page, mettez la dans un script à part et faites un
<?
require_once "chemin vers la page";
....

juste au début de votre page.

Voilà la fonction, ses arguments seront expliqués plus bas...

Source / Exemple :


<? 
// -----------------------------------------------------------------------
// Fonction de redimensionnement d'image
// -----------------------------------------------------------------------
function Resize($source, $destination, $width, $height, $stretch, $quality) {
// 1 - Gestion des erreurs
if (!file_exists($source)) return "Error : File not exist !";
if (!function_exists("ImageCreateFromJpeg")) return "Error : Librairie GD non instalée !";
// 2 - Lecture de l'image
$src_img=imagecreatefromjpeg($source); 
if (!$src_img) return "Erreur : Lecture impossible de l'image ".$source." !";
$w = imagesx($src_img);
$h = imagesy($src_img);
// 3 - Redimensionnement en largeur
if (!$stretch) {
    if ((($h * $width) / $w) > $height) {
        $im_w = ($w * $height) / $h;
        $im_h = $height;
    } else {
        $im_w = $width;
        $im_h = ($h * $width) / $w;
    }
} else {
    $im_w = $width;
    $im_h = $height;
}
$x = ($width-$im_w)/2;
$y = ($height-$im_h)/2;
// 4 - Création d'une image buffer
    $dst_img = imagecreate($width, $height);
    if (!$dst_img) return "Erreur : Buffer non créé : ".$dst_img;
    $bgc = imagecolorallocate($dst_img, 255, 255, 255);
    imagefilledrectangle($dst_img, 0, 0, $width, $height, $bgc);
    imagecopyresized($dst_img,$src_img,$x,$y,0,0,$im_w,$im_h,$w,$h); 
// 5 - Enregistrement du fichier
    imagejpeg($dst_img,$destination,$quality); 
}
?>

Conclusion :


Resize($source, $destination, $width, $height, $stretch, $quality)

Bon alors en paramétres tu indiques :

- source
l'image que tu veux redimensionner

-destination
l'image résultante

- width
la largeur de l'image résultante

- height
la hauteur de l'image résultante

- stretch
true/false : si l'image est strétchée ou bien proportionelle

- quality
la qualitée de l'image résultante

MISES A JOUR :

15/01/2004 : J'ai rajoutté l'argument strectch afin de pourvoir choisir entre étirer l'image ou la redimensionner automatiquement.

BUGS : Aucun bug constaté pour le moment.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
osgii Messages postés 4 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 27 décembre 2006
13 déc. 2006 à 07:33
Bonjour.
Avant que je pose ma question, j'aimerais vous prévenir que je débute, mais que je fais de mon mieu pour apprendre, et surtout comprendre... Pasque se baser sur des morceaux de code pour construir un site, c'est bien beau, mais si on ne les comprends pas, ça ne sert à rien...

Donc, voici ma question :

en fait, le script n'enregistre l'image qu'une seule fois? Et c'est seulement quand il l'affiche, qu'il la redimentionne, c'est juste?

Maintenant, ce que je comprends pas, c'est comment lui indiquer quelle image utiliser, quel fichier. Toi, tu lui donne un nom ( im_transforme ). Moi, si je veux lui dire quelle image prendre ( j'ai plusieurs image dans un dossier ), je dois lister mes images, et ensuite faire une boucle à afficher. Et à la place du nom de l'image, je met une variable? C'est ça?

Donc, si mon résonnement est correct, tu peux afficher une vignette un peu n'importe ou sur ta page. Pas seulement quand tu upload un fichier?

:) J'espère que c'est compréhensible, et que j'aurais une réponse.
Merci encore pour la source, même si je n'ai pas réussi à l'utiliser ( pour l'instant ).
cs_gadou Messages postés 4 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 8 décembre 2005
10 déc. 2006 à 09:24
pour eviter la pixelisation de l'image, remplacer
imagecopyresized
par
imagecopyresampled
cs_matters Messages postés 9 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 17 février 2009
20 avril 2006 à 19:52
Salut,
L'image créé est de mauvaise qualité. ( remarque, c'est pour une miniature )^^
Sinon, coté code, c'est pas mal.
++
LazarusLand Messages postés 7 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 4 mai 2006
14 févr. 2006 à 18:08
Il est super bien fait ton code mais ta bo modifié la qualité, le résultat est merdik qd tu pass du 1200 width en 800 width... Jsé po ptet c moi mai bon... si ya du new, tien moi o couran. ;-)
aquewel Messages postés 143 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 6 juin 2010
21 juin 2004 à 01:36
pourquoi ca m'affiche des 111 ??????????????
Afficher les 37 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.