Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-06-2010 03:31:54

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

PhPThumb & Zend Framework

Introduction : Après avoir lu pas mal de chose pour intégrer la bibliothèque PhPThumb au ZF je vous présente un petit tuto qui permet d'utiliser cette bibliothèque très simplement

Télécharger la bibliothèque : http://phpthumb.gxdlabs.com/

Idée reçu : Sur beaucoup de blog/tuto (pour ainsi dire tous) il est dit de renommer les classes afin qu'elles concordent avec les règles de nommage du ZF, déja c'est long et fastidieux car il faut retrouver dans le code les noms des classes, on peut en oublier, etc... Mais en plus il y à beaucoup plus simple, c'est ce que nous allons voir ici big_smile

Installer la bibliothèque : Après avoir téléchargé la bibliothèque PhPThumb (cf : lien ci-dessus), dézipper puis placer le tout dans le dossier 'library' de votre application de manière à obtenir quelque chose qui ressemble à ça :
http://img88.imageshack.us/img88/8972/library.png
Ensuite ne toucher à rien, voila la bibliothèque est installée, pas besoin de renommer quoique ce soit.

Aide de vue : Il s'agit maintenant de créer un helper pour nos vue afin de pouvoir générer des vignettes en un clin d’œil. Pour cela il suffit de créer un fichier .php dans le dossier 'views/helpers/' et de le nommer Thumb.php, vous devriez avoir quelque chose comme ça :
http://img541.imageshack.us/img541/9296/helpery.png
Et enfin insérez le code suivant :

Code:

<?php
require_once APPLICATION_PATH . '/../library/PhpThumb/ThumbLib.inc.php';

class Zend_View_Helper_Thumb extends Zend_View_Helper_Abstract {

    /*
     * @param   String  $imagePath  Le chemin vers l'image
     * @param   int     $width      La largeur en pixel de la vignette
     * @param   int     $height     La largeur en pixel de la vignette
     * @param   String  $destPath   Le chemin de destination de la vignette
     * @param   String  $urlPath    L'url pour l'affichage de la vignette
     */
    public function thumb($imagePath, $width, $height, $destPath, $urlPath) {
        $thumb = PhpThumbFactory::create($imagePath);
        $thumb->resize($width, $height);
        $file = basename($thumb->getFileName(), '.'.strtolower($thumb->getFormat())).'_thumb.'.strtolower($thumb->getFormat());
        $destPath = rtrim($destPath, '/') . '/' . $file;
        if (!file_exists($destPath)) {
            $thumb->save($destPath);
        }
        $urlPath = rtrim($urlPath) . '/' . $file;

        return $urlPath;
    }

}

Ne supprimer évidement pas la ligne

require_once APPLICATION_PATH . '/../library/PhpThumb/ThumbLib.inc.php';

c'est elle qui permet d'éviter d'avoir à renommer toutes les classes big_smile.

Utilisation :
L'utilisation est ensuite assez simple, dans une vue la ou vous souhaitez afficher vos vignettes faite :

Code:

<img src="<?php echo $this->thumb(BASE_PATH.'/images/test.jpg', 100, 100, BASE_PATH.'/images', $this->baseUrl().'/images') ?>"

Et vous obtiendrez une vignette de 100px par 100px dans votre dossier de destination avec pour nom 'nomImageBase_thumb' qui ne sera généré que si elle n'existe pas déjà.

Vous pouvez bien sur modifier le helper en fonction de vos besoin.


ps : Si vous n'avez pas la constante 'BASE_PATH' dans votre appli il suffit d'ajouter ceci dans votre index.php

Code:

// Define path to root directory
defined('BASE_PATH')
    || define('BASE_PATH', realpath(dirname(__FILE__)));

Dernière modification par shadypierre (17-06-2010 03:32:25)

Hors ligne

 

#2 14-07-2010 13:20:45

ferdikam
Membre
Date d'inscription: 03-05-2009
Messages: 18

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Merci pour ce tutoriel. J'ai tellement recherché un truc de ce genre.
je vais aussi essayé ton astuce avec la bibliothèque que j'aime aussi :
http://61924.nl/projects/imgbrowz0r.html

Hors ligne

 

#3 15-07-2010 11:15:41

Ph
Membre
Date d'inscription: 02-01-2010
Messages: 40

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Je n'avais pas vu et ne connaissais pas !

Il faudra que je jette un coup ! Ça gère le flash ? On envoyer des données par cookies ou post ?

Quelqu'un a déja tenté ca et des solutions du type CutyCapt http://cutycapt.sourceforge.net/  et aurait un feedback à faire coté sécurité performance, fonctionnalités ?

Hors ligne

 

#4 25-08-2010 17:03:38

lebilien
Membre
Lieu: avranches
Date d'inscription: 19-06-2007
Messages: 270
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

petit question si je veut que toute mes miniature fasse 50*50 et pas qu'il me fasse une redimensionnement en  40*48 selon la taille par exemple . Est ce que en utilisant cette fonction "$thumb->cropFromCenter(200);
" sa marche. En somme si je met l'image en 100*100 et que derrière je demande d'afficher sa :

Code:

$thumb->crop(50, 50);

sa donne quoi ?

je vais tester se soir en rentrant chez moi wink mais si quelqu'un a déja tester . En somme je veux faire comme sur facebook ou les avatar font tous 50*50  mais du coup il fait une sorte de zoom sur l'image.

cdt
Cédric


http://www.parkaddict.com Gagner des places dans vos parcs préférés

Hors ligne

 

#5 25-08-2010 17:32:39

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Je ne sais plus exactement, mais dans l’archive de la library tu as un exemple d'utilisation de chaque méthode avec le résultat obtenu.

Hors ligne

 

#6 26-08-2010 09:59:49

lebilien
Membre
Lieu: avranches
Date d'inscription: 19-06-2007
Messages: 270
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

J'ai un Image file not found comme message d'erreur pourtant l'image existe bien . Quand j'utilise mon autre script d'affichage l'image s'affiche bien. J'ai parcouru le forum et je cherche sur google mais je voit pas de solution .


http://www.parkaddict.com Gagner des places dans vos parcs préférés

Hors ligne

 

#7 26-08-2010 10:51:48

lebilien
Membre
Lieu: avranches
Date d'inscription: 19-06-2007
Messages: 270
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

bon autant pour moi sa marche et j'ai utilisé $thumb->adaptiveResize($width, $height); comme fonction.


http://www.parkaddict.com Gagner des places dans vos parcs préférés

Hors ligne

 

#8 29-09-2010 11:08:55

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Ce tutoriel à été FAQifié. Merci de donner vos retours et commentaires.

Cordialement,

Hors ligne

 

#9 18-10-2010 17:50:40

Hall
Membre
Date d'inscription: 23-08-2010
Messages: 54

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

J'utilise la même méthode pour redimensionner mes images proportionnellement et dynamiquement.
Je ne passe pas par une aide de vue mais par un contrôleur.
J'ai téléchargé la librairie PhpThumb et l'ai copié sous mon répertoire library puis j'ai crée l'action suivante dans mon contrôleur:

Code:

 public function thumbAction() {
        require_once APPLICATION_PATH . '/../library/PhpThumb/ThumbLib.inc.php';

   
        $imagePath=$_GET['imagePath'];
        $width=$_GET['width'];
        $height=$_GET['height'];
        $destPath=$imagePath;
        $urlPath=$imagePath;


        $thumb = PhpThumbFactory::create($imagePath);
        $thumb->resize($width, $height);
        $file = basename($thumb->getFileName(), '.'.strtolower($thumb->getFormat())).'_thumb.'.strtolower($thumb->getFormat());
        $destPath = rtrim($destPath, '/') . '/' . $file;
        if (!file_exists($destPath)) {
            $thumb->save($destPath);
        }
        $urlPath = rtrim($urlPath) . '/' . $file;

        return $urlPath;
    }

Et dans mon script de vue, j'ai:

Code:

 $img_logo ='<img src=" http://'.$_SERVER['HTTP_HOST'].$this->baseUrl().'/index/thumb?imagePath='. PUBLIC_PATH . 'images/logos/'. $clients['cli_id'] . '.' . $clients['cli_logo'].'&width=50&height=50" alt="'. $clients['client_rs'].'" />';

Seulement à l'exécution, j'ai ce message d'erreur:

Code:

Message: File not writeable: http://127.0.0.1/monSite.com/trunk/Sources/public/images/logos/9_thumb.jpg

Est-ce que vous savez d'où ça peut venir?

Hors ligne

 

#10 18-10-2010 18:17:07

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

En gros t'essaie d'enregistrer le thumb généré vers http://127.0.0.1/monSite.com/trunk/Sour … _thumb.jpg

c'est normal qu'il n'arrive pas à écrire là ^^

il faut que $destPath soit un chemin vers tes fichiers sur ton disque et non via le réseau.

Hors ligne

 

#11 20-10-2010 08:18:35

Hall
Membre
Date d'inscription: 23-08-2010
Messages: 54

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Merci 3euclide...ça marche!

Hors ligne

 

#12 09-08-2011 14:56:18

charlysquare
Membre
Date d'inscription: 05-11-2007
Messages: 21

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Bonjour,

Désolé de déterrer ce post, mais j'ai des pb de perf avec le PhpThumb.
Lorsqu'il y a un grand nombre d'images à traiter, ça ralentit toute mon application.
Auriez-vous des conseils pour accélérer le traitement ?

Merci d'avance pour vos réponses,
Charly

Hors ligne

 

#13 09-08-2011 15:21:12

lebilien
Membre
Lieu: avranches
Date d'inscription: 19-06-2007
Messages: 270
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Le script de phpThumb étant je pense bien optimisé , je dirais  que tu devrais tester sur un serveur différent . Tu as quoi comme serveur ? Moi sur un mutualisé je redimensionne une image en 3 taille et la pousse sur le cloud et sa ralentis pas alors après montre nous ton code stp.


http://www.parkaddict.com Gagner des places dans vos parcs préférés

Hors ligne

 

#14 09-08-2011 16:53:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

phpThumb peut utiliser imagemagick, ça va un peu plus vite que la libgd, mais bon c'est de toute façon un traitement assez lourd de redimensionner des photos. Je pense comme lebilien que phpThumb est bien optimisé. Vérifie juste que les caches de phpThumb sont bien activés.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#15 10-08-2011 00:59:17

charlysquare
Membre
Date d'inscription: 05-11-2007
Messages: 21

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Merci pour votre aide.

Je suis sur un serveur classique 1and1, il est prévu de passer dans 2 mois sur un serveur virtuel chez eux.
En local c'est pareil. Testé avec zend server installé sur un core i5 / 4go de ram.

Sinon le code de mon helper => dans /application/modules/default/views/helpers/Thumb.php

Code:

<?php
require_once APPLICATION_PATH . '/../library/PhpThumb/ThumbLib.inc.php';
     
class Zend_View_Helper_Thumb extends Zend_View_Helper_Abstract {

    /*
     * @param   String  $imagePath      image path
     * @param   int     $width          the width in pixels of the thumbnail
     * @param   int     $height            the height in pixels of the thumbnail
     * @param   String  $destPath          destination folder path
     * @param   String  $urlPath           the url to display the thumbnail
     * @param   String     $imageDefault     the filename & the extension of the default image
     * 
     */
        
    public function thumb($imagePath, $width, $height, $destPath, $urlPath, $imageDefault) {
    $path_parts = pathinfo($imagePath);
        $originalFile =  $path_parts['filename'].'.'.$path_parts['extension'];

        $destPathOriginal = rtrim($destPath, '/') . '/' .  $originalFile;
        if (!file_exists($destPathOriginal)) {
            $urlPath = rtrim($urlPath) . '/' . $imageDefault;
        }
        else {
           $thumb = PhpThumbFactory::create($imagePath);            
        $thumb->resize($width, $height);
        $file = basename(strtolower(preg_replace('/\s/', '-', $thumb->getFileName())), '.'.strtolower($thumb->getFormat())).'_'.$width.'x'.'.'.strtolower($thumb->getFormat());
        $destPath = rtrim($destPath, '/') . '/' . $file;
        if (!file_exists($destPath)) {
            $thumb->save($destPath);
        }
        $urlPath = rtrim($urlPath) . '/' . $file;
        }
        return $urlPath;
    }

}

Après je fais appel à mes images dans ma vue (affichées dans un caroussel qui se trouve dans le header) => dans application/modules/default/views/scripts/common/header.phtml

Code:

<ul>
<?php foreach($this->programmes as $programme) : 
$image = $this->photo->getPhoto($programme->id_programme);
$imageThumb=$this->adaptativeThumb(BASE_PATH.'/images/programmes/'.$image['photo'], 100, 80, BASE_PATH.'/images/programmes', $this->baseUrl().'/images/programmes', 'image_default_120x100.jpg');
$nomProgramme = $this->escape($programme->nom_programme);
$ville = $this->escape($programme->ville);
$moreUrl = $this->url(array('controller'=>'result', 'action'=>'index', 'id'=>$programme->id_programme));
?>
<li>
<a href="<?php echo $moreUrl;?>"><img src="<?php echo $imageThumb;?>" alt="<?php echo $ville; ?>" 
title="<?php echo $nomProgramme;?>" class="captify" /></a>
</li>
<?php endforeach;  ?>
</ul>

Si je désactive :

Code:

//$imageThumb=$this->adaptativeThumb(BASE_PATH.'/images/programmes/'.$image['photo'], 100, 80, BASE_PATH.'/images/programmes', $this->baseUrl().'/images/programmes', 'image_default_120x100.jpg');

La page s'affiche beaucoup plus vite.
Chaque thumbnail de 100x80 sauvegardé fait environ 10ko. (pour l'instant il y a 19 thumbnails qui défilent dans le caroussel).

En écrivant, je me rends compte que ce n'est peut-être pas phpThumb qui rame, mais tout simplement l'affichage des thumbs...
Y a t'il un moyen de les mettre en cache ou de faire précharger les images avant l'heure ? Le souci c'est que même si la page avec le header a déjà été chargée, lorsque je navigue sur une autre page, j'ai le même ralentissement, comme s'il rechargeait le header à chaque fois...

Des idées ?

Charly

Hors ligne

 

#16 10-08-2011 11:25:25

lebilien
Membre
Lieu: avranches
Date d'inscription: 19-06-2007
Messages: 270
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Pour les images moi je les charge de manière indépendante du reste du code. En somme j'ai un script qui lors du chargement de la page affiche une image anime gif de chargement de l'image ce qui permet d'afficher le reste du code  et les pages s'affiche au fur et a mesure sans ralentir le reste tu voit ?


http://www.parkaddict.com Gagner des places dans vos parcs préférés

Hors ligne

 

#17 22-08-2011 00:54:39

charlysquare
Membre
Date d'inscription: 05-11-2007
Messages: 21

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Merci de ton aide.
Le problème est résolu, en fait après nettoyage du code, la rapidité est revenue.
Ce n'était effectivement pas dû à PhpThumb.

Thanks a lot ;smile

Charly

Hors ligne

 

#18 29-07-2013 13:20:17

Pixhell
Nouveau membre
Lieu: Strasbourg
Date d'inscription: 28-03-2013
Messages: 3
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Bonjour à tous,

Désolé de réup ce message assez vieu, mais j'ai suivis le tuto sur un Zend 1.12 et cela ne fonctionne pas.
Quand je suis le tuto à la lettre, la page ou je mets mon img avec la fonction thumb, il ne se passe rien et mon css disparait, la page ne ressemble plus à rien.

Je suis désolé si la réponse est évidente mais perso je ne trouve pas. Je suis plutôt débutant sur zend.

Merci d'avance.

Hors ligne

 

#19 04-01-2015 12:49:32

zd_flo
Nouveau membre
Lieu: Paris
Date d'inscription: 04-01-2015
Messages: 3
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Le tuto fonctionne t il toujours avec la version de Zend actuelle ?

Hors ligne

 

#20 04-01-2015 18:22:40

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 607
Site web

Re: Générer des vignettes (thumbnail) avec la bibliothèque PhPThumb

Bonjour,

Je ne sais pas si le tuto marche toujours, mais je ne saurais que recommander l'utilisation de composer pour inclure la librairie (phpthumb sur packagist).

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages