Utilisation des valves, génération du site web de l'ULB - format xml
sommairesommaireindexindexdébutdébutpage précédentepage précédentepage suivantepage suivanteimprimerimprimerenvoyerenvoyermarquermarquer

Déformation de l'image

Quand une image est rétrécie, du fait qu'on doit recréer une image avec moins de pixels que l'image d'origine, celle-ci perd en qualité. Les détails les plus petits seront moins visibles, voire supprimés.

De même quand une image est agrandie, du fait qu'on essaye de recréer des pixels supplémentaires qui n'existent pas, l'image peut apparaître plus floue que l'image d'origine.

Un autre phénomème apparaît lorsque l'image est redimensionnée à une taille fixe dont le rapport entre la hauteur et la largeur est différent de celui de l'image d'origine. L'image est alors déformée (elle est "rétrécie" ou "agrandie" de manière différente en hauteur et en largeur).

Ces différentes déformations sont acceptables tant qu'elles restent dans certaines limites.

Au-delà de ces limites, il vaut mieux recourir à d'autres techniques pour agrandir ou rétrécir une image. On peut ajouter des bandes noires horizontales en haut et en bas de l'image (un peu comme un film en cinémascope qui passe sur un écran de télévision), on peut ajouter des bandes noires verticales à gauche et à droite de l'image (comme une télévison 16:9 qui affiche une ancienne émisssion filmée en 4:3), on peut tronquer l'image en supprimant des bandes horizontales ou verticales, etc.

Dans les exemples qui suivent, l'image avec l'hélicoptère possède, dans la source, une largeur de 259 pixels et une hauteur de 194 pixels.

L'image avec l'éléphant possède à la source une largeur de 100 pixels et une hauteur de 65 pixels.

Limite en expansion (agrandissement de l'image)

Pour fixer une limite en expansion, il faut utiliser un élément <expansion-maximale> dont les attributs hauteur et largeur donnent une valeur maximale, exprimée en pourcentage, à l'agrandissement de l'image.

Au-delà de cette limite, si la taille désirée n'est pas atteinte, l'image ne sera plus agrandie et des bandes horizontales au dessus et en dessous ou des bandes verticales à gauche et à droite seront ajoutées pour atteindre la taille désirée.

La valeur de ces attributs doit être un entier supérieur ou égal à 100. La valeur 100 indique que l'image ne pourra jamais être agrandie (autoriser un agrandissement maximum de 100%, est équivalent à interdire l'agrandissement).

Si on utilise une valeur égale à 200, ce qui est la valeur par défaut, on accepte un agrandissement de maximum 200% (on peut doubler la hauteur ou la largeur, et donc multiplier par quatre superficie de l'image), mais pas au-delà.


Dans cet exemple, l'image désirée est de 90x90 pixels. L'image d'origine de 100x65 pixels est donc agrandie en hauteur car on reste en-dessous de la limite fixée à 150% (65 x 150% = 97 pixels au maximum).

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="90" largeur="90">
         <expansion-maximale hauteur="150" largeur="150"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>

On peut également remarquer que l'image est rétrécie en largeur, car la largeur de l'image d'origine (165 pixels) est plus grande que celle désirée (90 pixels). Il en résulte une légère déformation de l'image, clairement visible si on compare les deux images. Comme on verra plus loin, il est également possible de limiter cetter déformation dans des valeurs acceptables. Au-delà de cette déformation maximale, l'image est tronquée (deux bandes verticales à gauche et à droite on été enlevées).


loading...ajax1

Dans cet exemple, l'image désirée est de 110x110 pixels. L'image d'origine de 100x65 pixels est donc agrandie. Pas de problème pour la largeur car on reste dans les limites fixées de 150%. Par contre, la hauteur désirée est supérieure au 150% autorisé.

La hauteur de l'image sera donc limitée à 150% de 65 pixels, soit 97 pixels, et des bandes noires sont automatiquement ajoutées pour arriver à la hauteur désirées de 110 pixels.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="110" largeur="110">
         <expansion-maximale hauteur="150" largeur="150"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax2

Dans cet exemple, l'image désirée est de 180x180 pixels. Autant la hauteur que la largeur sont hors limite, donc des bandes noires apparaissent autour de l'image, aussi bien horizontalement que verticalement.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="150" largeur="150"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax3

Couleur de fond des bandes horizontales et verticales

Pour utiliser une autre couleur que le noir, qui est la couleur par défaut, on peut utiliser un élément <fond> dont l'attribut couleur mentionne la couleur souhaitée (par défaut couleur="noir").

Cet attribut couleur peut contenir le nom d'une des couleurs de l'ULB, la valeur "noir" ou un code de couleur exprimé en hexadécimal au format habituel (exemple, #C8D8D8).

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="bleuULB"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax4
Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="#C8D8D8"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax5

L'élément <fond> peut également posséder un attribut transparence qui indique le taux de transparence de cette couleur de fond. Il s'agit d'un entier compris entre 0 et 100.

transparence="0", qui est la valeur par défaut, indique qu'il n'y a pas de transparence. transparence="100" indique que la couleur sera totalement transparente (elle ne se verra pas et laissera entièrement apparaître le fond de l'écran derrière l'image).

Dans cet exemple, transparence est égal à 0 indiquant aucune transparence. C'est équivalent à ne pas mettre cet attribut.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="bleuULB" transparence="0"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax6

Dans cet exemple, transparence est égal à 10 donnant une légère transparence (10%).

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="bleuULB" transparence="10"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax7

Dans cet exemple, transparence est égal à 90 donnant une transparence presque totale (90%).

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="bleuULB" transparence="90"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax8

Dans cet exemple, transparence est égal à 100 indiquant une transparence totale. La couleur de fond ne se voit plus du tout laissant apparaitre ce qui se trouve derrière l'image.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="180" largeur="180">
         <expansion-maximale hauteur="200" largeur="200"/>
         <fond couleur="bleuULB" transparence="100"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
</valves>
loading...ajax9

Limite en compression (rétrecissement des images)

Pour éviter de perdre trop de détails lors de la contraction d'une image (en largeur et/ou en hauteur), on peut également fixer une limite à la compression, à l'aide d'un élément compression-maximale. Cet élément possède deux attributs hauteur="..." et largeur="..." qui fixent une valeur maximale en contraction tant pour la hauteur que pour la largeur.

Si cette limite est atteinte et que la taille de l'image est encore trop grande à celle qui est désirée, alors l'image sera rognée ("cropée"): des zones horizontales en haut et en bas, ou des zones verticales à gauche et à droite, seront enlevées de l'image pour atteindre la taille désirée.

La valeur de ces attributs est donnée en pourcentage par rapport à la taille de l'image originale. Cette valeur doit être un nombre entier inférieur ou égal à 100.

La valeur 100 indique que l'image ne pourra jamais être rétrécie (autoriser un rétrecissement maximum de 100%, est équivalent à interdire le rétrécissement). La valeur 0 indique que l'image pourra être réduite à une taille nulle.

Si on utilise une valeur égale à 25, ce qui est la valeur par défaut, on accepte de rétrécir les images à 25% de la taille de l'image (on peut réduire à un quart la hauteur et la largeur de l'image, réduisant ainsi de 16 fois la superficie de l'image).


Dans cet exemple, on autorise une compression maximale de 50% tant en hauteur qu'en largeur. La hauteur étant agrandie (on passe de 65 à 100 pixels), elle ne sera pas affectée par ce paramètre.

Par contre, la largeur elle passe de 100 à 80 pixels. Comme on reste dans les limites acceptables (50% de 100 pixels = 50 pixels minimum), l'image ne sera pas tronquée et celle-ci sera entièrement affichée, avec une déformation visible entre la hauteur (agrandie) et la largeur (diminuée).

Cette valeur de 50% est tout à fait acceptable pour l'image de l'éléphant, mais elle pourrait devenir pénalisante si les images originales sont beaucoup plus grandes que la taille désirée.

Regardons ce que cela donne avec l'image de l'hèlicoptère. Cette image sera réduite tant en hauteur qu'en largeur (on passe de 259x194 pixels à 80x80 pixels). Accepter une réduction de 50% donne une taille minimale de 130x97 pixels, ce qui amène à devoir enlever des parties plus importantes de l'image (25 pixels en haut et en bas, 8 pixels à gauche et à droite).

Comme on peut le voir, cela a comme conséquence que le sujet de l'image commence à sortir un peu du cadre.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <compression-maximale hauteur="50" largeur="50"/>  
         <déformation-maximale valeur="500"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>

Remarque: dans cet exemple, on autorise une déformation maximale élevée (comme expliqué plus bas dans cette page) afin de mieux visualiser les limites en compression de l'image. Sur un site réel, cette déformation doit évidemment être réduite à une valeur inférieure.

loading...ajax10

Ici, on fixe la limite en hauteur et en largeur à 90% de la taille originale. Toujours pas de problème pour la hauteur, par contre la largeur étant limitée à 90% (90% de 100 pixels = 90 pixels), l'image sera donc réduite à 90 pixels de large et une bande de 5 pixels sera enlevée à gauche et à droite pour arriver à la largeur de 80 pixels souhaitée. L'éléphant par contre est moins déformé que précedemment.

Avec l'image de l'hélicoptère cette limite à 90% amènera le sujet (l'hélicoptère et le sauveteur au bout de son filin) pratiquement hors du cadre.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <compression-maximale hauteur="90" largeur="90"/>        
         <déformation-maximale valeur="500"/>
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax11

Dans cet exemple, l'image n'est pas rétrécie (la limite en hauteur et en largeur est fixée à 100%, interdisant toute compression). L'image sera évidemment tronquée en largeur (une partie à gauche et une partie à droite seront supprimées).

Avec l'exemple de l'hélicoptère, cette troncature de l'image fait totalement sortir le sujet du cadre.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <compression-maximale hauteur="100" largeur="100"/>        
      </vignette>      
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax12

La valeur par défaut, 25%, a été choisie pour afficher avec le moins de perte possible la plupart des images.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80"/>     
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax13

Limite en déformation

Comme expliqué plus haut, réduire ou agrandir une image à une taille qui ne respecte pas le même rapport entre la hauteur et la largeur peut amener à déformer l'image.

Pour limiter cette déformation, on peut fixer une valeur maximale à celle-ci à l'aide d'un élément <déformation-maximale>. Celui-ci possède un attribut valeur qui fixe la déformation maximale admise.

Cet attribut est exprimé en pourcentage. Le rapport entre la hauteur et la largeur pourra varier de plus ou moins le pourcentage en question. Cette valeur doit être un nombre entier égal ou supérieur à 0.

S'il vaut 0, la rapport devra être conservée (0% de variation) et l'image ne sera pas du tout déformée (mais elle sera tronquée pour s'adapter à la taille désirée).

La valeur par défaut, si cet attribut n'est pas mentionné, est de 20%.


Voyons ce que cela donne, en autorisant une déformation maximale de 100%. On peut voir que les deux images sont fortement déformées (on passe d'un format rectangulaire à un format carré), mais on ne pert aucune partie de l'image originale.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <déformation-maximale valeur="100"/>
      </vignette>
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax14

En ajustant la déformation maximale à 25%, les images sont moins déformées, mais elles ont été un peu tronquées à gauche et à droite.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <déformation-maximale valeur="25"/>
      </vignette>
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax15

En ajustant la déformation maximale à 0%, les images ne sont plus du tout déformées, mais les parties tronquées à gauche et à droite sont nettement plus importantes.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80">
         <déformation-maximale valeur="0"/>
      </vignette>
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax16

La valeur par défaut de 20%, est un bon compromis avec la pluspart des images.

Exemple
<valves style="cadre2">
   <affichage>
      <titre/>
      <vignette hauteur="80" largeur="80/>
      <aperçu/>
   </affichage>
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="elephant"/> 
   <source-xml href="http://www.ulb.ac.be/cache/news-test1.xml" identificateurs="bidon-sauveur"/> 
</valves>
loading...ajax17
ULB - entreprise écodynamique