Publié le 11/10/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Creer une vignette a partir d'une image JPEG

Comment générer un Thumbnail à la volée ? Pour afficher une galerie d'image, la méthode la plus courante est de parcourir le contenu d'un répertoire et d'afficher des vignettes des images.

Générer des miniatures

La class JPEGThumbnail permet de générer et afficher une image redimensionnée. Les fonctions de la librairie GD étant peu bavarde, une gestion d'erreur a été ajoutée sur le ratio et le fichier d'entré
<?php
/**
 * Créer une vignette d'une image JPEG
 * un ratio <100 réduit l'image
 * un ratio >100 agrandit l'image
 * Fobec 2010
 */
 
class JPEGThumbnail {
 
    private $img;
/**
 * Redimensionner l'image
 * @param string $file nom du fichier
 * @param int $ratio coef de redimensionnement [10..1000]
 */
    public function resize($file,$ratio) {
        /** tester les paramètres **/
        if (!file_exists($file)) {
            throw new Exception("File not exists !!!");
        }
        if ($ratio<10 ||$ratio>1000) {
            throw new Exception("Ratio range must be between 10 and 1000 !!!");
        }
        /** Ouvrir le JPEG inital **/
        $oldim = imagecreatefromjpeg($file);
        $oldw = imagesx($oldim);
        $oldh = imagesy($oldim);
 
         /** Calculer les nouvelles dimensions **/
        $width = ($oldw/100)*$ratio;
        $height = ($oldh/100)*$ratio;
 
        /** Dessiner la vignette **/
        $this->img = imagecreatetruecolor($width,$height);
        imagecopyresampled($this->img,$oldim,0,0,0,0,$width,$height,$oldw,$oldh);
    }
 
    /**
     * Afficher la vignette
     */
    public function flush() {
        header("Content-Type: image/jpeg");
        imagejpeg($this->img);
    }
}
?>

Exemple de réduction de la taille de l'image

Imaginons que le site internet repose sur un dossier d'image. La class permet de générer les vignettes sans toucher au image dans le dossier, les vignettes sont redimensionnées à l'affichage.
<?php
/**
 * Exemple d'utilisation
 */
try {
    $tumb = new JPEGThumbnail;
    $tumb->resize("123.jpg", 200);
    $tumb->flush();
} catch (exception $e) {
    echo $e->__toString();
}
?>
La génération de vignette à la volé demande des ressources supplémentaire au serveur. Par contre, sans créer des images redimensionnées, la maintenance est plus facile car seules les images à taille réelle doit être mise a jour.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
11/10/2010
Visualisation
vu 3074 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 264 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Fobec dans tuto

Merci pour la remarque Toluar,
Les user-agent sont effectivement un bon indicateur pour les utilisateurs. Les crawlers et robots en tout genre ne prennent pas toujours la peine de renseigner cette...

Publié par stam dans tuto

Le code est interessant. Que doit contenir le fichier index ?

Publié par Axel dans java

Bonjour,
cet exemple a ete prepare et compile sous Netbeans 7.2 ;)
S'il y a un soucis, n'hesite pas

Publié par pgts09 dans tuto

Bonjour,
Felicitations pour ce tuto simple, et qui semble repondre exactement ce que je cherchais !
Malheureusement je n'arrive pas faire fonctionner, voici ce que donne mon essai : J'ai pourt...

Publié par hilflo dans tuto

Tres bon article qui montre bien les subtilites des mutualises de 1and1.
Je l'ai utilise pour un de mes sites en y ajoutant de l'url rewriting pour eviter d'avoir des parametres dans l'url avec cet...