Changer la couleur d’arrière-plan SVG – Exemples C#

La couleur d’arrière-plan SVG est essentielle pour assurer la clarté et le contraste visuels, améliorant ainsi la visibilité et l’esthétique du contenu. Il est essentiel pour maintenir la cohérence de la conception, améliorer l’accessibilité en fournissant un texte lisible et définir les limites des compositions multicouches. Vous pouvez changer la couleur d’arrière-plan d’un SVG soit en modifiant le SVG directement, soit en appliquant des styles à l’aide de CSS ou de JavaScript.

Aspose.SVG for .NET API vous permet de modifier un document SVG et d’apporter des modifications à son contenu.

Dans cet article, vous apprendrez comment appliquer la couleur d’arrière-plan aux fichiers SVG à l’aide d’Aspose.SVG for .NET et comment utiliser la couleur d’arrière-plan des images SVG dans des documents HTML à l’aide de la bibliothèque Aspose.HTML C#.

Modifier SVG directement

Pour définir la couleur d’arrière-plan d’une image SVG, vous devez insérer un nouvel élément SVG, tel qu’un rectangle ou un cercle, comme premier élément enfant du document SVG. Cette méthode prend une règle sur l’ordre des éléments SVG: les éléments qui apparaissent plus tard dans le code SVG apparaissent au-dessus de ceux qui apparaissent plus tôt. En plaçant un rectangle ou un cercle au début du SVG, vous créez effectivement un calque d’arrière-plan qui se trouve sous tous les autres éléments graphiques.

Ajouter un arrière-plan au SVG

La méthode la plus courante pour définir la couleur d’arrière-plan en SVG consiste à créer un élément <rect> qui couvre l’intégralité du canevas SVG. Cette approche garantit que l’arrière-plan fait partie du contenu SVG lui-même. L’extrait de code suivant illustre comment ajouter un arrière-plan à SVG: créez un nouvel élément rectangle en SVG qui servira d’arrière-plan. Pour ce faire, le rectangle reçoit les attributs width="100%", height="100%" et fill="#ebf3f6", et est positionné de manière à apparaître derrière tout autre contenu SVG:

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Set SVG Namespace Url
 6    string SvgNamespace = "http://www.w3.org/2000/svg";
 7
 8    string documentPath = Path.Combine(DataDir, "tree.svg");
 9
10    // Load an SVG document from the file
11    var document = new SVGDocument(documentPath);
12
13    // Get root <svg> element of the document
14    var svgElement = document.RootElement;
15
16    // Create a rectangle element and set the "width", "height" and "fill" attributes
17    var rectElement = (SVGRectElement)document.CreateElementNS(SvgNamespace, "rect");
18    rectElement.X.BaseVal.Value = 3;
19    rectElement.Y.BaseVal.Value = 3;
20    rectElement.SetAttribute("width", "100%");
21    rectElement.SetAttribute("height", "100%");
22    rectElement.SetAttribute("fill", "#ebf3f6");
23
24    // Add the rectangle element as the first child to <svg> element
25    svgElement.InsertBefore(rectElement, svgElement.FirstChild);
26
27    // Save the SVG document
28    document.Save(Path.Combine(OutputDir, "add-background-color.svg"));

Changer la couleur d’arrière-plan SVG

Si votre document SVG comporte un élément qui sert de fond, comme par exemple un rectangle comme dans l’exemple précédent, changer la couleur de fond implique plusieurs étapes:

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Load an SVG document from a file
 6    var document = new SVGDocument(Path.Combine(DataDir, "add-background-color.svg"));
 7
 8    // Get root svg element of the document
 9    var svgElement = document.RootElement;
10
11    // Get the first <rect> element to change color
12    var rectElement = svgElement.QuerySelector("rect") as SVGRectElement;
13
14    // Set a new "fill" attribute value for the <rect> element
15    rectElement.SetAttribute("fill", "#fef4fd");
16
17    // Save the SVG document
18    document.Save(Path.Combine(OutputDir, "change-background-color.svg"));

Remarque: Cette méthode (méthode <rect>) est la plus cohérente entre les navigateurs et garantit que la couleur d’arrière-plan fait partie du SVG, même lorsque le SVG est exporté ou utilisé dans différents contextes.

La figure suivante montre l’image SVG originale (a), l’image avec l’arrière-plan ajouté (b) et l’image dans laquelle la couleur d’arrière-plan SVG a été modifiée (c):

Texte “Image svg originale (a) et image svg avec la couleur d’arrière-plan ajoutée (b) et modifiée (c)”

Changer la couleur d’arrière-plan à l’aide de CSS

Changer la couleur d’arrière-plan SVG à l’aide de CSS est une tâche courante qui améliore la présentation visuelle des images SVG dans les pages Web. Bien que les éléments SVG ne prennent pas en charge une propriété native background-color, vous pouvez obtenir cet effet en utilisant CSS pour styliser des éléments SVG supplémentaires comme <rect> ou en appliquant des styles via CSS externe, interne ou en ligne.

CSS en ligne – Comprendre les pièges

Vous pouvez intuitivement tenter d’utiliser la propriété style="background-color" directement sur un élément <svg>, en vous attendant à ce qu’elle fonctionne de la même manière qu’elle le fait pour les éléments HTML comme <div> ou <p> . Cependant, cette approche est semée d’embûches et d’incompréhensions. Mais parfois ça marche ! Dans l’exemple suivant, nous utilisons la propriété background-color dans l’attribut style pour l’élément <svg>:

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Prepare a path to a source SVG file
 6    string documentPath = Path.Combine(DataDir, "tulips.svg");
 7
 8    // Load an SVG document from the file
 9    var document = new SVGDocument(documentPath);
10
11    // Get root <svg> element of the document
12    var svgElement = document.RootElement;
13
14    // Create a style attribute for <svg> element
15    svgElement.SetAttribute("style", "background: grey");
16
17    // Save the SVG document
18    document.Save(Path.Combine(OutputDir, "with-background-color.svg"));

Pourquoi cela semble-t-il fonctionner?

Dans certains navigateurs ou contextes de rendu, l’application de background-color à un élément SVG peut sembler fonctionner, car le navigateur peut remplir l’espace alloué au SVG avec la couleur spécifiée. Cependant, cet effet ne se produit pas parce que le SVG lui-même a un arrière-plan, mais parce que la zone autour ou derrière le contenu SVG est colorée. Il s’agit probablement d’un comportement accidentel, plutôt que d’une fonctionnalité définie par la spécification SVG.

Le problème avec cette approche

Le principal problème lié à l’utilisation de background-color dans l’attribut SVG style est qu’il ne fait pas partie de la spécification SVG. La norme SVG ne reconnaît pas background-color comme propriété de style valide pour un élément SVG. Cela signifie:

  1. Ce qui fonctionne dans un navigateur peut ne pas fonctionner dans un autre.
  2. L’arrière-plan ne fait pas réellement partie du contenu SVG, vous avez donc moins de contrôle sur son comportement et son apparence, en particulier lorsque le SVG est exporté, imprimé ou traité dans d’autres contextes.

CSS interne

Le CSS interne fait référence aux styles intégrés directement dans un document HTML ou SVG, généralement dans une balise <style>. Cela vous permet de définir des styles spécifiques qui s’appliquent uniquement au document actuel, sans affecter les autres documents ni nécessiter de feuilles de style externes.

Dans l’exemple suivant,

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Set SVG Namespace URL
 6    string SvgNamespace = "http://www.w3.org/2000/svg";
 7    
 8    // Load an SVG document from the file
 9    var document = new SVGDocument(Path.Combine(DataDir, "tulips.svg"));
10
11    // Get the root <svg> element of the document
12    var svgElement = document.RootElement;
13
14    // Create a <style> element
15    var styleElement = (SVGStyleElement)document.CreateElementNS(SvgNamespace, "style");
16
17    // Set the CSS content to define a background color class
18    styleElement.TextContent = @".background {fill: grey;}";
19
20    // Insert the <style> element at the beginning of the <svg> element
21    svgElement.InsertBefore(styleElement, svgElement.FirstChild);
22
23    // Create a rectangle element and set the class to "background"
24    var rectElement = (SVGRectElement)document.CreateElementNS(SvgNamespace, "rect");
25    rectElement.X.BaseVal.Value = 0;
26    rectElement.Y.BaseVal.Value = 0;
27    rectElement.SetAttribute("width", "100%");
28    rectElement.SetAttribute("height", "100%");
29    rectElement.SetAttribute("class", "background");
30
31    // Add the rectangle element as the first child to the <svg> element, after the <style> element
32    svgElement.InsertBefore(rectElement, svgElement.ChildNodes[1]);
33
34    // Save the SVG document
35    document.Save(Path.Combine(OutputDir, "add-background-color-with-css.svg"));

Cette approche permet une séparation nette du style et de la structure, en tirant parti du CSS pour une gestion plus facile et des modifications futures potentielles de la couleur d’arrière-plan du SVG. Le CSS interne est largement pris en charge par tous les navigateurs modernes, garantissant un rendu cohérent de vos images SVG.

La figure montre la visualisation du fichier SVG original (a) et du même fichier avec la couleur d’arrière-plan ajoutée (b):

Texte “Image svg originale et image svg avec nouvelle couleur de fond”

Changer la couleur d’arrière-plan à l’aide de SVG Builder

Dans le code suivant, SVG Builder ajoute par programme une couleur d’arrière-plan à un document SVG existant (pour le fichier tulips.svg comme dans le cas précédent).

 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Initialize an SVG document
 6    using (var document = new SVGDocument(Path.Combine(DataDir, "tulips.svg")))
 7    {
 8        var svg = new SVGSVGElementBuilder()
 9            .Width(100, LengthType.Percentage)
10            .Height(100, LengthType.Percentage)
11            .Build(document.FirstChild as SVGSVGElement);
12
13        // Create a new <g> element using SVGGElementBuilder and add <style> and <rect> elements to it
14        var g = new SVGGElementBuilder()
15            .Id("backgound")
16            .AddStyle(style => style
17                .Type("text/css")
18                .AddRule(".background", r => r.Fill(Color.AliceBlue))
19            )
20            .AddRect(rect => rect
21                .X(0).Y(0).Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
22                .Class("background")
23            ).BuildElement(document);
24        svg.InsertBefore(g, svg.FirstElementChild);
25
26        // Save the document
27        document.Save(Path.Combine(OutputDir, "add-background-color-with-builder.svg"));
28    }

L’étape clé du code consiste à utiliser SVGGElementBuilder pour définir un élément de groupe (<g>) qui inclut un élément <style> avec CSS interne. Ce CSS définit une couleur d’arrière-plan via la classe .background. Un élément <rect> est ensuite ajouté pour appliquer l’arrière-plan à l’aide de cette classe. Le groupe est inséré au début du SVG, définissant ainsi la couleur d’arrière-plan.

Dans le chapitre SVG Builder – Création et modification SVG avancées, vous trouverez un guide pour manipuler efficacement SVG à l’aide de l’API Aspose.SVG Builder, couvrant des aspects allant de la création d’éléments de base aux techniques avancées telles que les mixins et sucre syntaxique.

Ajouter une couleur d’arrière-plan pour l’image SVG dans HTML

Pour continuer à suivre ce didacticiel, vous devez installer et configurer la bibliothèque Aspose.HTML for .NET dans votre projet C#.

Lorsque vous travaillez avec des documents HTML contenant des images SVG, vous devrez peut-être ajouter une couleur d’arrière-plan à vos éléments SVG. Bien que les SVG soient généralement transparents, l’ajout d’un arrière-plan peut améliorer la visibilité et l’esthétique. L’exemple C# suivant montre comment ajouter par programmation une couleur d’arrière-plan à tous les éléments SVG d’un document HTML à l’aide de C# et de la bibliothèque Aspose.HTML pour .NET.

  1. Utilisez l’un des constructeurs HTMLDocument() pour charger un fichier HTML.
  2. Utilisez la méthode QuerySelector() pour rechercher l’élément <style> dans le document HTML où vous ajouterez une nouvelle règle CSS.
  3. Utilisez la propriété InnerHTML pour afficher le contenu actuel de l’élément <style> afin de garantir qu’aucune règle importante n’est écrasée.
  4. Mettez à jour la propriété TextContent de l’élément <style> pour ajouter une règle CSS permettant de définir la couleur d’arrière-plan des éléments SVG.
  5. Utilisez la méthode Save() pour exporter le document HTML mis à jour vers un nouveau fichier.

Le fichier HTML source aspose-svg.html contient du CSS interne. Pour ajouter une couleur d’arrière-plan pour toutes les images SVG, nous allons inspecter le contenu actuel de l’élément <style> et ajouter une règle de style aux éléments SVG spécifiant la couleur d’arrière-plan qui sera appliquée à toutes les images SVG dans le fichier HTML.

 1using System.IO;
 2using Aspose.Html;
 3...
 4
 5    // Prepare a path to a source HTML file with SVG image
 6    string documentPath = Path.Combine(DataDir, "aspose-svg.html");
 7
 8    // Load an HTML document from the file
 9    var document = new HTMLDocument(documentPath);
10
11    // Find a <style> element and assign a background color value for all svg elements
12    var styleElement = document.QuerySelector("style");
13
14    // Print content of the <style>
15    Console.WriteLine(styleElement.InnerHTML);
16
17    // Assign a text content for the style element
18    styleElement.TextContent = styleElement.InnerHTML + "svg {background-color: #fef4fd;}";
19
20    // Save the HTML document
21    document.Save(Path.Combine(OutputDir, "with-background-color.html"));

La figure montre la visualisation du fichier HTML d’origine et du même fichier avec la couleur d’arrière-plan ajoutée pour l’image SVG:

Texte “Page HTML originale et le même fichier avec la couleur d’arrière-plan ajoutée pour l’image SVG”

Changer la couleur d’arrière-plan à l’aide de JavaScript

Document SVG

Pour ajouter dynamiquement une couleur d’arrière-plan à un fichier SVG à l’aide de JavaScript, vous pouvez intégrer un élément <script> directement dans le SVG. Voici un guide étape par étape sur la façon d’y parvenir:

  1. Utilisez la classe SVGDocument pour charger un fichier SVG.
  2. Accédez à l’élément racine <svg> à partir du document chargé. C’est l’élément auquel vous ajouterez l’arrière-plan.
  3. Utilisez la méthode CreateElementNS() pour créer un nouvel élément <script>. Ce script contiendra du code JavaScript pour ajouter une couleur d’arrière-plan SVG.
  4. Définissez le code JavaScript. Sélectionnez l’élément SVG, créez un <rect> avec toutes les dimensions et la couleur d’arrière-plan, et insérez-le comme premier enfant pour définir l’arrière-plan.
  5. Ajoutez l’élément <script> nouvellement créé au document SVG.
  6. Enregistrez le document SVG mis à jour avec le code JavaScript intégré, qui inclut désormais la logique des couleurs d’arrière-plan.
 1using Aspose.Svg;
 2using System.IO;
 3...
 4
 5    // Prepare the path to the SVG document
 6    string documentPath = Path.Combine(DataDir, "tree.svg");
 7
 8    // Load the SVG document from the file
 9    var document = new SVGDocument(documentPath);
10
11    // Get the root <svg> element of the document
12    var svgElement = document.RootElement;
13
14    // Create a new <script> element
15    var scriptElement = document.CreateElementNS("http://www.w3.org/2000/svg", "script");
16
17    // Define JavaScript code to add a <rect> element as the background
18    scriptElement.TextContent = @"
19        var svgElement = document.getElementsByTagName('svg')[0];
20        if (svgElement) {
21            var rectElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
22            rectElement.setAttribute('x', '0');
23            rectElement.setAttribute('y', '0');
24            rectElement.setAttribute('width', '100%');
25            rectElement.setAttribute('height', '100%');
26            rectElement.setAttribute('fill', '#fef4fd');
27            svgElement.insertBefore(rectElement, svgElement.firstChild);
28        };
29    ";
30
31    // Append the <script> element to the SVG document
32    svgElement.AppendChild(scriptElement);
33
34    // Save the modified SVG document
35    document.Save(Path.Combine(OutputDir, "svg-background-color-using-script.svg"))

SVG dans un document HTML

Pour continuer à suivre ce didacticiel, vous devez installer et configurer la bibliothèque Aspose.HTML for .NET dans votre projet C#.

Pour modifier la couleur d’arrière-plan d’une image SVG dans un document HTML à l’aide de JavaScript avec Aspose.HTML pour .NET, vous pouvez intégrer JavaScript directement dans le code SVG, puis utiliser Aspose.HTML pour exécuter le script. Voici comment y parvenir:

  1. Chargez un document HTML à l’aide du constructeur HTMLDocument().
  2. Utilisez le QuerySelector() pour rechercher l’élément SVG par son ID ou un autre attribut.
  3. Utilisez la méthode CreateElement() pour créer un nouvel élément <script>. Définissez son TextContent sur du code JavaScript qui modifie la couleur d’arrière-plan du SVG.
  4. Ajoutez le nouvel élément <script> au corps du document à l’aide de la méthode AppendChild(), en vous assurant que le code JavaScript est exécuté.
  5. Incluez une vérification conditionnelle pour gérer les cas où l’élément SVG n’est pas trouvé, en affichant un message pertinent si nécessaire.
  6. Utilisez la méthode Save() pour exporter le document HTML mis à jour avec le script intégré vers un nouveau fichier.
 1using Aspose.Html;
 2using System.IO;
 3...
 4
 5    // Prepare a path to a source HTML file with SVG image
 6    string documentPath = Path.Combine(DataDir, "aspose-svg.html");
 7
 8    // Load an HTML document from the file
 9    var document = new HTMLDocument(documentPath);
10
11    // Find the SVG element by its ID (or any other attribute)
12    var svgElement = document.QuerySelector("svg[id='mySvg']");
13
14    if (svgElement != null)
15    {
16        // Create a new <script> element
17        var scriptElement = document.CreateElement("script");
18
19        // Define JavaScript code to add a <rect> element as the background
20        scriptElement.TextContent = @"
21            var svgElement = document.getElementById('mySvg');
22            if (svgElement) {
23                var rectElement = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
24                rectElement.setAttribute('x', '0');
25                rectElement.setAttribute('y', '0');
26                rectElement.setAttribute('width', '100%');
27                rectElement.setAttribute('height', '100%');
28                rectElement.setAttribute('fill', '#fef4fd');
29                svgElement.insertBefore(rectElement, svgElement.firstChild);
30            };
31        ";
32
33        // Append the <script> element to the HTML document's body
34        document.Body.AppendChild(scriptElement);
35    }
36    else
37    {
38        // Handle the case where the svgElement was not found
39        Console.WriteLine("SVG element not found.");
40    }
41
42    // Save the SVG document
43    document.Save(Path.Combine(OutputDir, "svg-background-color-html-script.html"));

Conclusion

Dans cet article, nous avons examiné plusieurs méthodes pour appliquer et modifier la couleur d’arrière-plan des images SVG à l’aide des bibliothèques Aspose.SVG for .NET et Aspose.HTML for .NET:

En résumé, la méthode que vous choisissez doit dépendre du contexte dans lequel le SVG sera utilisé et du niveau de contrôle et de cohérence requis. La modification directe du SVG est généralement la méthode la plus fiable, en particulier pour les fichiers SVG autonomes. Lorsque vous travaillez avec SVG dans des documents HTML, CSS et JavaScript offrent une flexibilité mais avec des limitations potentielles.

Voir aussi

Texte “Convertisseur de couleurs”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.