Mise à l'échelle SVG – SVG Scaling – Exemples C#
Comment mettre à l’échelle SVG – Code C#
À l’aide de la
bibliothèque Aspose.SVG pour .NET, vous pouvez effectuer une transformation d’échelle par programme. Cet article a couvert des exemples C# pour la mise à l’échelle SVG. Cas considérés d’utilisation de la fonction scale() dans l’attribut transform
ainsi que d’une matrice de transformation matrix(a,b,c,d,e,f).
Fonction Scale()
La mise à l’échelle est une transformation SVG qui agrandit ou réduit un objet à l’aide d’un facteur de mise à l’échelle. Vous devez distinguer la mise à l’échelle uniforme et directionnelle. La fonction de transformation scale(sx, sy)
permet de mettre à l’échelle les images le long des axes x et y. La valeur du facteur d’échelle sy
est facultative et si elle est omise, elle est supposée être égale à sx
.
L’extrait de code C# suivant montre comment créer un élément SVG <circle>
, définir ses attributs et appliquer une transformation à l’aide de la fonction scale()
pour l’attribut transform
.
- Créez une instance de la classe
SVGDocument. La propriété
RootElement
pointe vers l’élément racine<svg>
du document. - Créez un élément
<circle>
et définissez les attributs requis.- Vous pouvez utiliser la méthode CreateElementNS() pour créer une instance de la classe SVGCircleElement.
- Appelez la méthode
SetAttribute() pour définir les attributs spécifiant la position, la taille, le remplissage et la transformation. Utilisez la fonction
scale()
pour l’attributtransform
qui spécifie une transformation de mise à l’échelle. En particulier,scale(2)
signifie mettre à l’échelle l’élément<circle>
d’un facteur 2 dans les dimensions x et y.
- Pour ajouter
circleElement
àsvgElement
, vous pouvez utiliser la méthode AppendChild(). - Appelez la méthode Save() pour enregistrer l’image SVG résultante dans un fichier local spécifié par chemin.
1using Aspose.Svg;
2using System.IO;
3...
4
5 // Create a new SVG document
6 using (var document = new SVGDocument())
7 {
8 var svgElement = document.RootElement;
9
10 // Create a rect element and set its attributes
11 var circleElement = (SVGCircleElement)document.CreateElementNS("http://www.w3.org/2000/svg", "circle");
12 circleElement.Cx.BaseVal.Value = 100;
13 circleElement.Cy.BaseVal.Value = 100;
14 circleElement.R.BaseVal.Value = 50;
15 circleElement.SetAttribute("fill", "salmon");
16
17 // Apply scaling to the SVG circle
18 circleElement.SetAttribute("transform", "scale(2)");
19
20 // Append the rect element to the SVG
21 svgElement.AppendChild(circleElement);
22
23 // Save the document
24 document.Save(Path.Combine(OutputDir, "scale-circle.svg"));
25 }
Matrice de transformation SVG – Scale Matrix
Ici, nous examinerons l’exemple C# pour mettre à l’échelle une image SVG entière plutôt qu’un seul de ses éléments et implémenter la transformation à l’aide d’une matrice d’échelle. Examinons de plus près le code C# permettant d’appliquer la matrice d’échelle.
- Chargez un fichier SVG source en utilisant l’un des constructeurs SVGDocument().
- Obtenez l’élément racine
<svg>
du document.
- Remarque : Pour appliquer une transformation à l’ensemble de l’image SVG, vous devez appliquer l’attribut
transform
à l’élément racine<svg>
.
- Utilisez la méthode
GetCTM() de la classe SVGGraphicsElement qui renvoie la matrice de transformation actuelle (CTM) associée à l’élément
<svg>
. Le CTM représente les transformations cumulatives appliquées à l’élément et comprend des informations sur la traduction, la mise à l’échelle, la mise à l’échelle et l’inclinaison qui peuvent être appliquées à l’élément. - Après avoir obtenu le CTM, utilisez la méthode Scale() qui post-multiplie une transformation d’échelle sur la matrice actuelle et renvoie la matrice résultante. La méthode Scale(scaleFactor) ne prend qu’un seul argument: scaleFactor. Ce paramètre est obligatoire et représente la mise à l’échelle sur les axes x et y que vous souhaitez appliquer.
- Construisez un
transformAttribute
– une représentation sous forme de chaîne d’une matrice de transformation 2D en utilisant les valeurs de la matrice de transformation modifiéetransformationMatrix
. La notation matricielle est matrix(a, b, c, d, e, f). - Appelez la méthode
SetAttribute() pour définir l’attribut
transform
de l’élément<svg>
à l’aide de la chaînetransformAttribute
. - Appelez la méthode Save() pour enregistrer l’image SVG résultante dans un fichier local.
1using Aspose.Svg;
2using System.IO;
3...
4
5 // Load an SVG document
6 string documentPath = Path.Combine(DataDir, "snowflake.svg");
7
8 using (var document = new SVGDocument(documentPath))
9 {
10 var svgElement = document.RootElement;
11
12 // Get the transformation matrix associated with the svgElement
13 var transformationMatrix = svgElement.GetCTM();
14 transformationMatrix = transformationMatrix.Scale(0.5F);
15
16 // Apply the transformation matrix to the svgElement
17 var transformAttribute = "matrix(" + transformationMatrix.A + "," + transformationMatrix.B + ","
18 + transformationMatrix.C + "," + transformationMatrix.D + "," + transformationMatrix.E + ","
19 + transformationMatrix.F + ")";
20 svgElement.SetAttribute("transform", transformAttribute);
21
22 // Save the document
23 document.Save(Path.Combine(OutputDir, "scale-svg.svg"));
24 }
La figure suivante montre le SVG original (a) et l’image mise à l’échelle avec un facteur d’échelle de 0,5 – l’image réduite (b).
Voir également
- Vous pouvez télécharger les exemples complets et les fichiers de données depuis
GitHub.
- À propos du téléchargement depuis GitHub et de l’exécution d’exemples, vous le découvrirez dans la section
Comment exécuter les exemples.
- Pour apprendre à utiliser une matrice de transformation pour faire pivoter, mettre à l’échelle, traduire et incliner des graphiques SVG et considérer des exemples de code SVG, veuillez consulter l’article
Matrice de transformation – Exemples de code SVG.
- Lisez l’article SVG Transformation pour en savoir plus et obtenir des exemples de code SVG pour faire pivoter, mettre à l’échelle, déplacer et incliner les graphiques SVG à l’aide de l’attribut de transformation SVG.