Augmenter la qualité des photos JPG sur Magento

J'ai récemment été confronté à des problèmes de qualité des photos sur Magento.

Dans un premier temps, j'ai vainement cherché une option pour régler cela via le back-office de configuration Magento... j'ai fini par me rendre à l'évidence : ce n'est pas possible (tout du moins dans les versions 1.3 et précédentes).
J'ai ensuite étudié le code source afin de déterminer comment le framework gère et surtout génère les différentes tailles des photos (sur la page liste, les miniatures, etc.) des produits.

J'ai ainsi découvert que Magento utilise GD2, avec un réglage de qualité à 80% par défaut (et non modifiable via la configuration, back-office ou XML). Une valeur de 80/100 de qualité est suffisante dans la plupart des cas. Néanmoins lors la mise en place d'une solution e-Commerce on sait qu'une photo de très bonne qualité peut faire la différence.

L'idée est donc de pousser la qualité de compression (jpeg) à 90%, voici les solutions envisagées :

  1. modifier le code PHP trouvé plus haut : NON, il ne faut jamais modifier directement le code issu du core de Magento ! (De la même manière qu'il ne faut jamais croiser les rayons.)
  2. créer un module permettant d'administrer la valeur de la qualité de compression via le back-office : intéressant, réutilisable mais trop long à réaliser. Je passe ! :-)
  3. overrider (surcharger) le code : facile, rapide et "propre" : la solution que j'ai retenu

Modifier la qualité de compression des photos Magento :

  1. Étape 1

    Copier le ficher /lib/Varien/Image/Adapter/Gd2.php vers /app/code/local/Varien/Image/Adapter/Gd2.php en créant les répertoires manquants si nécessaire.

  2. Étape 2

    Ouvrir le fichier Gd2.php (la copie, pas l'original) aux environs de la ligne 80 et remplacer :

    call_user_func($this->_getCallback('output'), $this->_imageHandler, $fileName);

    par :

    if ($this->_fileType === IMAGETYPE_JPEG) {
        call_user_func($this->_getCallback('output'), $this->_imageHandler, $fileName, 90);
    } else {
        call_user_func($this->_getCallback('output'), $this->_imageHandler, $fileName);
    }

    Dans le code ci-dessus j'ai opté pour 90, mais vous pouvez faire varier cette valeur entre 0 et 100 de qualité.

  3. Étape 3

    Pour terminer, il faut penser à vider le cache des images via System > Cache Management.

Voilà, c'était simple, efficace et réutilisable sur n'importe quel projet, à partir du moment ou vous travaillez avec des images au format jpeg (qui le format le plus commun dans le domaine de la photo numérique) et que votre serveur supporte GD2.

Billet original publié sur Narno.com

6 comments on "Augmenter la qualité des photos JPG sur Magento"

Portrait de Anonyme
Anonyme (visiteur) - lun, 01/02/2010 - 12:03:

Je tiens à apporter toutefois une précision. Lorsque l'on possède un catalogue de produits conséquent, il ne faut pas vider le cache d'images à la légère. Chaque appel de page avec une image va en effet générer à nouveau des images dans le cache avec le nouveau taux de compression, mais cette opération est très consommatrice de ressources.
Après une opération de ce genre mes pages demandaient plus d'une minute pour générer les 9 miniatures de la première page d'une catégorie, chaque appel au détail d'un produit, une 20ène de seconde...

L'idéal serait un script à lancer automatiquement en horaires décalés pour mettre en cache les différentes tailles d'images.

Portrait de Arnaud Ligny
Arnaud Ligny - lun, 07/06/2010 - 12:31:

Il est à noter que depuis Magento version CE 1.4 et EE 1.8, il n'est plus nécessaire de dupliquer l'adapter.

En effet, une nouvelle méthode setQuality à été implémentée et elle peut être utilisée directement dans les templates.

Par exemple :

echo $this->helper('catalog/image')->init($this->getProduct(), 'image', $_image->getFile())->resize(42, 50)->setQuality(90);

Portrait de Anonyme
Anonyme (visiteur) - mer, 11/01/2012 - 20:13:

A mélodie значение фамилии бесплатноscience particulier n’est anonyme fessier son PC et les glose sont la trait de sien bas-bleu qui sont envoyé de leurs propos

Portrait de momo
momo (visiteur) - mar, 17/01/2012 - 14:39:

L'idéal serait un script à lancer automatiquement en labatterie horaires décalés pour mettre en cache les différentes tailles d'images.

Portrait de James Vicky
James Vicky (visiteur) - ven, 10/02/2012 - 15:22:

Between me and my husband we've owned more MP3 players over the years than I can count, including Sansas, iRivers, iPods (classic & touch), the Ibiza Rhapsody, etc. But, the last few years I've settled down to one line of players. Why? Because I was happy to discover how well-designed and fun to use the underappreciated (and widely mocked) Zunes are. Limo Hire Brisbane

Portrait de Matthew Kriner
Matthew Kriner (visiteur) - mer, 15/02/2012 - 17:04:

Apple now has Rhapsody as an app, which is a great start, but it is currently hampered by the inability to store locally on your iPod, and has a dismal 64kbps bit rate. If this changes, then it will somewhat negate this advantage for the Zune, but the 10 songs per month will still be a big plus in Zune Pass' favor. lawyer melbourne

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <p> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage