Et bien voilà, grâce à votre aide, mon plugin est enfin opérationnel. Et j’avoue que je suis assez content de ce que je viens de programmer ... ça va me faire gagner un temps fou par la suite.
Le plugin (qui sera nommé directResize) se charge de lui-même de retailler et compresser les images présentent dans la page pour les optimiser avant de les envoyer au navigateur client.
Tout l’intérêt réside dans le fait que du côté admin, il suffit de prendre l’image grandeur nature dans la bibliothèque, la placer dans la page et la redimentionner pour la réduire à la taille choisie. Si l’image fait 1600x1200 d’origine et que vous la redimentionnez à 300x200, une vignette sera alors automatiquement crée dans le dossier de votre choix à la taille d’affichage.
Bien sûr, j’ai déjà pu trouver quelques plugins du genre sur la toile mais je n’en ai jamais trouvé un complet qui me permette de faire tout ce que je souhaite. Voici donc la liste des actions et possibilités :
- Exécution automatiquement avant que la page ne soit envoyée au client. (Quand vous retournez dans l’admin, vous avez toujours l’image d’origine que vous pouvez redimentionner à souhaits)
- Recherche dans la page toutes les images qui sont dans le dossier (et ses sous-dossiers) que vous avez spécifié ex: assets/images. Le but est qu’il ne redimentionne pas les images du template par exemple.
- Détermine si les valeurs de tailles sont dans des balises de type width=100 ou dans le style : style="width: 100px" et récupère les valeurs de width et height.
- Calcul le nom de la vignette (qui est lié aux tailles) et regarde si une vignette du même nom existe déjà. S’il y a déjà une vignette, elle ne sera donc pas recalculée.
- Redimentionnement et enregistrement de la vignette au besoin suivant les critères d’emplacement et de type de recadrement définis. 5 modes de recadrement ont été programmés. 0: applique w et h ; 1: basé sur w ; 2: basé sur h ; 3: w max et h max ; 4: img mini pour remplir un rectangle de w x h. Seul le mode 0 est un mode non proportionnel. Gère automatiquement les .jpg, .jpeg, .gif et .png
- Recherche toutes les balises d’images en question et les remplace par les nouvelles balises faisant appel aux nouvelle vignettes. Suppression dans la foulée des valeurs définies dans les width et height.
- Renvoie de la page recalculée à MODx
Voici un lien pour voir le résultat d’une page calculée avec ce système :
http://netambition.dynalias.org/modx/pageindex
Il me reste un point que je ne comprend pas. (je suis issu de l’ASP et viens de me mettre à PHP). Pourquoi le système de redimentionnement ne fonctionne pas sur des images de très grande taille ?? J’ai bien essayé de jouer avec ce paramètre : ini_set(’memory_limit’, ’4M’); mais même en le mettant à 200M, le calcul ne se fait pas. D’ailleurs, le système de gestions des images lié à TinyMCE n’arrive pas non plus à calculer la vignette de cette image.