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 3264 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par taje dans CMS

je suis débutant et je veut participer et évoluer

Publié par Djrac dans tuto

Bjr.
J'ai essaye ce code mais en cliquant sur f5 il me donne un autre temps d'execution malgre qu'il s'agit du meme page PHP. Je comprends pas ou il est le probleme.
Merci de m...

Publié par fffffff dans CMS

tesffff

Publié par Christophe dans CMS

en remplacant la ligne:
SHGetFileInfo(PChar(ePath.Text + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
par la ligne
SHGetFileInfo(PChar(ePath.Text + Sear...

Publié par victor dans java

Merci, je cherchais un code de ce genre !
A +