Guide des filtres SVG – Gaussian blur, ombres et lumière

Les filtres SVG créent des effets visuels tels que flou, ombres portées, éclairage, changements de saturation, rotation de teinte et ajustements de canaux directement dans le balisage SVG. Ce tutoriel explique comment les filtres sont définis dans <defs>, comment les primitives de filtre s’enchaînent et comment appliquer un filtre à une forme, un texte ou une image.

Réponse rapide : définissez un <filter> SVG dans <defs>, ajoutez une ou plusieurs primitives comme <feGaussianBlur>, <feOffset>, <feBlend>, <feSpecularLighting> ou <feColorMatrix>, puis appliquez le filtre avec filter="url(#filter-id)" sur l’élément cible.

1<svg width="220" height="140" xmlns="http://www.w3.org/2000/svg">
2  <defs>
3    <filter id="soft-blur">
4      <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
5    </filter>
6  </defs>
7  <circle cx="110" cy="70" r="45" fill="#20b2aa" filter="url(#soft-blur)" />
8</svg>

Dans cet article, vous apprendrez à définir un filtre, combiner des primitives de flou, ombre, éclairage et couleur, contrôler la région de filtre, choisir entre <feGaussianBlur>, <feColorMatrix> et <feComponentTransfer>, et corriger les problèmes de rendu courants.

Qu’est-ce qu’un filtre SVG ?

Un filtre SVG modifie un graphique vectoriel ou bitmap avant son rendu final. Il peut flouter un élément, créer une ombre, modifier les canaux couleur, ajouter un éclairage, déformer des pixels ou combiner plusieurs résultats intermédiaires. Le filtre reste dans le balisage SVG, donc il reste scalable et modifiable.

Un filtre est défini par <filter> dans <defs>. Le <filter> lui-même n’est pas rendu; ses enfants, les primitives de filtre, effectuent les opérations. Les attributs importants sont x, y, width, height, filterUnits et primitiveUnits.

Filtres SVG et primitives de filtre

Chaque primitive de filtre réalise une opération et produit un résultat. Les attributs in et result permettent de chaîner les sorties et entrées.

CatégorieÉlémentRôleAttributs clés
Gaussian Blur<feGaussianBlur>Floute l’entréein, stdDeviation, result
Ombre<feOffset>Décale le canal alphain, dx, dy, result
Ombre<feBlend>Mélange deux couchesin, in2, mode
Éclairage<feSpecularLighting>Crée un reflet brillantin, surfaceScale, specularExponent, lighting-color
Éclairage<fePointLight>Définit une source lumineuse ponctuellex, y, z
Composition<feComposite>Combine deux résultatsoperator, k1, k2, k3, k4
Couleur<feColorMatrix>Transforme les valeurs RGBA par matricetype, values
Couleur<feComponentTransfer>Modifie les canaux séparémentfeFuncR, feFuncG, feFuncB, feFuncA

<fePointLight> n’est pas une primitive autonome de sortie; c’est une source lumineuse utilisée comme enfant de primitives d’éclairage.

Comment créer des filtres SVG

  1. Ajoutez un bloc <defs>.
  2. Créez un <filter> avec un id stable.
  3. Ajoutez des primitives comme <feGaussianBlur>, <feOffset>, <feBlend> ou <feColorMatrix>.
  4. Utilisez in et result pour chaîner les étapes.
  5. Agrandissez x, y, width et height si flou ou ombre dépassent la forme.
  6. Appliquez le filtre avec filter="url(#id)".

Gaussian Blur

<feGaussianBlur> adoucit l’image selon une fonction gaussienne. stdDeviation contrôle le rayon de flou; une valeur agit sur les deux axes, deux valeurs créent un flou directionnel.

 1<svg height="400" width="600" xmlns="http://www.w3.org/2000/svg">
 2    <defs>
 3        <filter id="f1" x="-20%" y="-20%" width="140%" height="140%">
 4            <feGaussianBlur in="SourceGraphic" stdDeviation="10" />
 5        </filter>
 6        <filter id="f2" x="-20%" y="-20%" width="140%" height="140%">
 7            <feGaussianBlur in="SourceGraphic" stdDeviation="10, 0" />
 8        </filter>
 9    </defs>
10    <g stroke="none" fill="#20B2AA">
11        <ellipse cx="60" cy="80" rx="55" ry="35" />
12        <ellipse cx="200" cy="80" rx="55" ry="35" filter="url(#f1)" />
13        <ellipse cx="340" cy="80" rx="55" ry="35" filter="url(#f2)" />
14    </g>
15</svg>

Quatre ellipses illustrent l’effet Gaussian blur avec différentes valeurs stdDeviation

Le flou dépasse souvent les limites de la forme; agrandissez la région du filtre pour éviter les bords coupés.

Vous pouvez créer un effet Gaussian Blur en C# avec Aspose.SVG for .NET. Consultez Gaussian Blur pour des exemples avec SVGFEGaussianBlurElement.

Effet d’ombre portée

Une ombre SVG se construit souvent avec SourceAlpha, un décalage, un flou et un mélange avec le graphique original.

 1<svg height="200" width="200" xmlns="http://www.w3.org/2000/svg">
 2    <defs>
 3        <filter id="shadow" x="-20%" y="-20%" width="150%" height="150%">
 4            <feOffset result="offset" in="SourceAlpha" dx="10" dy="10" />
 5            <feGaussianBlur result="blur" in="offset" stdDeviation="10" />
 6            <feBlend in="SourceGraphic" in2="blur" mode="normal" />
 7        </filter>
 8    </defs>
 9    <ellipse cx="95" cy="90" rx="75" ry="55" fill="#20B2AA" filter="url(#shadow)" />
10</svg>

Effet d’ombre portée appliqué à une ellipse

  1. <feOffset> décale SourceAlpha et stocke le résultat dans "offset".
  2. <feGaussianBlur> floute ce résultat et le nomme "blur".
  3. <feBlend> combine SourceGraphic avec l’ombre floutée.

Effet d’ombre portée de l’ellipse étape par étape

Effets de lumière SVG

Les effets de lumière utilisent des primitives comme <feDiffuseLighting> et <feSpecularLighting>, avec des sources lumineuses comme <fePointLight>. Les primitives d’éclairage utilisent souvent le canal alpha comme carte de surface.

 1<svg height="300" width="300" xmlns="http://www.w3.org/2000/svg">
 2    <defs>
 3        <filter id = "F1">
 4            <feGaussianBlur in = "SourceAlpha" stdDeviation = "4" result = "blur" />
 5            <feSpecularLighting result = "light" in = "blur" specularExponent = "25" lighting-color = "#bbbbbb">
 6                <fePointLight x = "80" y = "60" z = "200" />
 7            </feSpecularLighting>
 8            <feComposite in = "SourceGraphic" in2 = "light" operator = "arithmetic" k1 ="0" k2 ="1" k3 ="1" k4 ="0" />
 9        </filter>
10    </defs>
11    <g fill = "INDIANRED" filter = "url(#F1)">
12        <circle cx="100" cy="100" r="60" />
13        <circle cx="100" cy="230" r="60" />
14        <circle cx="230" cy="100" r="60" />
15        <circle cx="230" cy="230" r="60" />
16    </g>
17</svg>

Résultat de l’effet d’éclairage appliqué à quatre cercles rouges

Dans cet exemple, trois éléments sont des primitives de filtre et <fePointLight> définit la source de lumière. <feGaussianBlur> prépare SourceAlpha, <feSpecularLighting> crée le reflet, puis <feComposite> combine ce reflet avec SourceGraphic.

Bouton bleu avec texte PUSH créé par une chaîne de primitives d’éclairage

Filtres de couleur

<feColorMatrix> applique une transformation matricielle aux canaux RGBA. <feComponentTransfer> donne un contrôle par canal avec <feFuncR>, <feFuncG>, <feFuncB> et <feFuncA>.

Série d’images avec différentes valeurs de saturation Série d’images avec différentes valeurs hueRotate Photo traitée avec un transfert personnalisé des composants RGBA

Erreurs courantes et corrections

ProblèmeCauseCorrection
Sortie de filtre coupéeRégion x, y, width, height trop petiteAgrandissez la région du filtre
Ombre invisibleMauvaise entrée ou mélange incorrectUtilisez SourceAlpha pour <feOffset>
Effet de lumière platCanal alpha non préparé ou valeurs faiblesFloutez SourceAlpha et ajustez les paramètres
Couleurs inattenduesMatrice ou transfert incorrectVérifiez les valeurs étape par étape

FAQ – filtres SVG

Comment appliquer un filtre SVG à un élément ?

Définissez le filtre dans <defs> et appliquez filter="url(#filter-id)" à une forme, un texte, un groupe ou une image.

Pourquoi mon flou ou mon ombre est-il recadré ?

Ces effets dépassent souvent les limites d’origine. Agrandissez x, y, width et height de la région de filtre.

Quelle est la différence entre feColorMatrix et feComponentTransfer ?

Utilisez <feColorMatrix> pour une transformation globale comme saturation ou hue rotation. Utilisez <feComponentTransfer> pour contrôler séparément les canaux rouge, vert, bleu ou alpha.

Puis-je créer des filtres SVG avec Aspose.SVG for .NET ?

Oui. Filtres SVG en C# montre comment créer des filtres avec Aspose.SVG for .NET.

Ressources associées