Fils RSS pour les
Articles
Commentaires

J'utilise depuis longtemps le plugin ImageManager. Le plugin dans sa toute dernière version (2.4.1) me donne entière satisfaction et la possibilité de le coupler avec le plugin LightBox 2 (version 2.2.1) est tout simplement géniale. Tout allait pour le mieux dans le meilleur des mondes jusqu'à...

Lors de la rédaction de mon billet sur la mise à jour de Wordpress sur mon hébergement Dreamhost, une de mes vignettes1 s'est affichée de façon tout-à-fait inattendue pour ne pas dire anarchique:

  • au lieu d'afficher un simple

upgrade2.jpg

  • j'ai eu droit à quelque chose comme ceci

thumb_inverse.jpg

Que s'est-il donc passé?

La réponse est simple! Au lieu de réduire la taille de l'image de départ de (423x59 pixels) à une vignette de (278x39 pixels) en mettant la largeur à la valeur par défaut (278 pixels) et en appliquant une règle de 3 toute simple sur la hauteur2, le programme met la hauteur à la valeur par défaut (278 pixels) et applique la règle de 3 sur la largeur de l'image, ce qui va nous donner une vignette avec une largeur de 1993 pixels3!

:o La vignette affichée a donc une dimension de 1993 x 278 pixels ! o

  • si nous regardons le code source du fichier imagemanager-plugin.php aux alentours des lignes 152 et suivantes:

  • les dimensions de la vignette sont initialisées à la valeur par défaut4

  1. var thumbwidth = $imgoptions[thumbnail_width];
  2. var thumbheight = $imgoptions[thumbnail_height];

  • nous trouvons ensuite le code de la fameuse règle de 3:
  1. if (params.f_url != null) {
  2.     if (params.f_width> params.f_height) {
  3.         thumbheight = Math.round((thumbwidth/params.f_width) * params.f_height);
  4.     } else if (params.f_height> params.f_width){
  5.         thumbwidth = Math.round((thumbheight/params.f_height) * params.f_width);
  6.     }

  • Tout paraît correct. Rien, à priori ne devrait inverser la règle: la largeur (params.f_width) de 423 pixels est plus grande que la hauteur (params.f_height) qui vaut, dans notre cas, 59 pixels. C'est donc bien la largeur qui devrait rester à 278 pixels et cela devrait être la hauteur qui devrait être ramenée à 39 pixels.

Or c'est le contraire qui se produit!

  • l'erreur provient du test effectué à la ligne 156. Dans notre cas, params.f_width (423 pixels) est plus petit que params.f_height (59 pixel) parce que la comparaison se fait sur des valeurs alphanumériques: "5" de "59" est plus grand que "4" de "423" et le test s'inverse.5

  • pour corriger cette situation, il suffit d'effectuer le test sur les valeurs numériques de la hauteur et de la largeur en insérant la fonction parseInt() dans les tests de comparaison:

  1. if (params.f_url != null) {
  2.     if (parseInt(params.f_width)> parseInt(params.f_height)) {
  3.         thumbheight = Math.round((thumbwidth/params.f_width) * params.f_height);
  4.     } else if (parseInt(params.f_height)> parseInt(params.f_width)){
  5.         thumbwidth = Math.round((thumbheight/params.f_height) * params.f_width);
  6.     }

et tout redevient normal

:d

 




 

  1. thumbnail en anglais [retour]
  2. ce qui devrait nous donner une hauteur de 39 pixels: 59 x (278/423) [retour]
  3. qui est bien égal à 423 x (278/59) [retour]
  4. 278 pixels dans mon cas [retour]
  5. cqfd [retour]

Tags: , , ,

2 réponses à “Bug dans le plugin ImageManager”

  1. le 03 nov 2007 à 0:52 Stéphnae

    Etonnant, j’utilise aussi ImageManager 2.4.1 et WP lightbox 2 ver. 0.5 et je n’ai pas rencontré le problème évoqué ici!

    Heureusement parce que je n’aurais pas été capble d’aller pareillement triturer le code!

  2. le 03 nov 2007 à 9:58 Marc Charlet

    bonjour Stéphane,

    le bug se manifeste seulement dans le cas où la hauteur de l’image est plus petite que 100 pixels et que le premier chiffre de la hauteur est ‘plus grand alphabétiquement’ que le premier chiffre de la largeur comme par exemple pour une image de 200×50 pixels: 5 de la hauteur est ‘plus grand alphabétiquement’ que 2 de la largeur. Dans ces cas-là, les dimensions de la vignette vont être faussées.
    Je suis d’accord avec toi pour dire que dans la plupart des cas (copies d’écran notamment) cette situation ne se présente pas.

    PS essaie (juste pour voir) de capturer une bande de ton écran d’une hauteur de 90 pixels (comme par exemple une barre d’outils de ton navigateur) et de faire afficher la vignette par ImageManager…