CSS : les filtres graphiques avec CSS3 ; propriété filter

Vous voulez insérer, par exemple, dans une page web une photo qui doit apparaître floutée et couleur "sépia".
Plus besoin de passer par un logiciel graphique tel Photoshop ou Gimp pour modifier la photo originale.
Il vous suffit désormais de l'incorporer sans retouche dans la page (avec la balise img) et de la styler avec une règle basée sur la nouvelle propriété filter.
La propriété filter peut s'appliquer à n'importe quel élément HTML.

Application d'un filtre à une photo

Photo floutée

Photo avec effet "sepia"

Le code correspondant

<img class ="centre" src ="../images/jolie_fille.jpg" style ="filter : blur(5px); " /> ... <img class ="centre" src ="../images/cheval.jpg" style ="filter : sepia(1); " />

La classe "centre" prévoit un centrage horizontal et une largeur de 60%.
Sinon les images de la page sont "inline-block" et ont une largeur de 30%.

Pour flouter une image il faut utiliser la commande blur() avec en paramètre une valeur en pixels (px). Plus la valeur est grande et plus l'image sera floue.
Pour vieillir une photo il faut utiliser la commande sepia avec en paramètre une valeur décimale comprise entre 0 et 1.

Application d'un filtre à une vidéo

Les filtres CSS peuvent s'appliquer non seulement à des photos mais aussi à des vidéos.

Une vidéo avec effet "sepia"

Le code correspondant

<video class ="centre" controls src = "../audio_video/epave.mp4" style ="filter : sepia(1); " />

Appliquer un filtre à un élément block (une boîte)

On peut appliquer un filtre CSS à n'importe quel élément de la page (et pas uniquement aux images).

Deux boîtes : l'une floutée et l'autre avec l'effet "sepia"

Le code correspondant

<div style ="width : 80%; height : 200px ; margin : 10px auto 10px auto ; background : chocolate ; filter : blur(4px); "></div> <div style ="width : 80%; height : 200px ; margin : 10px auto 10px auto ; background : chocolate ; filter : sepia(1); "></div>

Toutes les commandes de la propriété filter

Nous allons maintenant passer en revue toutes les commandes possibles de la propriété CSS filter.
Et elles sont nombreuses ...

Commande grayscale

Grayscale : nuance de gris.
css : filter css : filter css : filter

Si le paramètre est 1 (ou 100%) alors image en noir et blanc ; si paramètre vaut 0 alors aucun effet.
Ci-dessus l'argument est successivement 1, 0.5 et 0.
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter :grayscale(100%);"/> <img src = "../images/jolie_fille.jpg" style ="filter :grayscale(50%);" /> <img src = "../images/jolie_fille.jpg" style ="filter :grayscale(0%);" />

Commande sepia

Sepia : effet de jaunissement de l'image.
css : filter css : filter css : filter

Si paramètre vaut 1 (ou 100%) alors sepia total ; si paramètre vaut 0 alors l'image filtrée correspond à celle d'origine.
Ci-dessus l'argument est successivement 100%, 50% et 0%.
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : sepia(100%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : sepia(50%);"/> <img src = "../images/jolie_fille.jpg" style ="filter : sepia(0%);" />

Commande saturate

Saturate : ajoute de la saturation aux couleurs.
css : filter css : filter css : filter
Si le paramètre vaut 1 (ou 100%) alors image filtrée correspond à celle d'origine.
Si le paramètre vaut 0 alors image en nuances de gris. Si l'argument est supérieur à 1 alors l'image est saturée.
Ci-dessus l'argument est successivement 0, 2 et 6.
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : saturate(0); " /> <img src = "../images/jolie_fille.jpg" style ="filter : saturate(2);"/> <img src = "../images/jolie_fille.jpg" style ="filter : saturate(6);"/>

Commande hue-rotate

Il s’agit d’une rotation sur le cercle chromatique.
css : filter css : filter css : filter css : filter

Le paramètre est une valeur comprise entre 0 degré et 360 degrés.

Une rotation de 360° équivaut a une rotation de 0°.
Ci-dessus l'argument est successivement 0 deg, 90deg, 180deg et 270deg.
Le code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter :hue-rotate(0deg);" /> <img src = "../images/jolie_fille.jpg" style ="filter :hue-rotate(90deg);" /> <img src = "../images/jolie_fille.jpg" style ="filter :hue-rotate(180deg);" /> <img src = "../images/jolie_fille.jpg" style ="filter :hue-rotate(270deg);" />

Commande blur

Floute l'image.
css : filter css : filter css : filter

Le paramètre est exprimé en pixels (px). Si l'argument est 0px alors aucun floutage.
Ci-dessus l'argument vaut successivement 6px, 3px et 0px.
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : blur(6px);" /> <img src = "../images/jolie_fille.jpg" style ="filter : blur(3px);" /> <img src = "../images/jolie_fille.jpg" style ="filter : blur(0px);" />

Commande invert

Pour obtenir le négatif d'une image.
css : filter css : filter

L'argument ne peut prendre que deux valeurs : 1(négatif) ou 0 (image d'origine).
Le code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : invert(1);" /> <img src = "../images/jolie_fille.jpg" style ="filter : invert(0);" />

Commande brightness

Permet de modifier la luminosité de l'image.
css : filter css : filter css : filter css : filter

La valeur de référence est 1 (ou 100%) ; si argument supérieur à 1 alors image éclaircie ; si argument est inférieur à 1 alors image assombrie.
Ci-dessus l'argument vaut successivement 200%, 100%, 50% et 25%
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : brightness(200%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : brightness(100%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : brightness(50%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : brightness(25%);" />

Commande contrast

Permet de modifier le contraste de l'image.
css : filter css : filter css : filter css : filter

La valeur de référence est 1 (ou 100%) ; si argument supérieur à 1 alors image plus contrastée ; si argument est égal à 0 alors affichage d'une zone grisée. Si le paramètre compris entre 1 et 0 alors perte de contraste.
Ci-dessus l'argument vaut successivement 200%, 100%, 50% et 0%.
Code correspondant :

<img src = "../images/jolie_fille.jpg" style ="filter : contrast(200%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : contrast(100%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : contrast(50%);" /> <img src = "../images/jolie_fille.jpg" style ="filter : contrast(0%);" />

Filtre CSS composite appliqué à des photos

Les photos ci-dessus sont floutées mais aussi sont verdies.

Le code correspondant

Une classe dans la feuille de style et deux instructions :

... <style> .filtre1 {filter : blur(4px) hue-rotate(90deg); } ... </head><body> ... <img src = "../images/jolie_fille.jpg" class ="filtre1 centre" /> <img src ="../images/cheval.jpg" class ="filtre1 centre" /> ...

On peut donc produire des filtres composites c'est à dire basés sur plusieurs primitives.
Ici le filtre (défini par la classe filtre1) est basé sur deux primitives : blur et hue-rotate.

Admettez que les filtres avec CSS3 c'est puissant et que la syntaxe reste très simple.
Retour menu