SVG-Skalierung – C#-Beispiele
So skalieren Sie SVG-C#-Code
Mit der
Aspose.SVG for .NET-Bibliothek können Sie eine Skalierungstransformation programmgesteuert durchführen. In diesem Artikel wurden C#-Beispiele für die SVG-Skalierung behandelt. Berücksichtigte Fälle der Verwendung der Funktion scale() im Attribut transform
sowie einer Transformationsmatrix matrix(a,b,c,d,e,f).
Scale()-Funktion
Skalierung ist eine SVG-Transformation, die ein Objekt mithilfe eines Skalierungsfaktors vergrößert oder verkleinert. Man muss zwischen gleichmäßiger und gerichteter Skalierung unterscheiden. Die Transformationsfunktion scale(sx, sy)
ermöglicht die Skalierung von Bildern entlang der x- und y-Achse. Der Wert des Skalierungsfaktors sy
ist optional, und wenn er weggelassen wird, wird davon ausgegangen, dass er gleich sx
ist.
Der folgende C#-Codeausschnitt zeigt, wie man ein SVG-Element <circle>
erstellt, seine Attribute festlegt und eine Transformation mithilfe der Funktion scale()
für das Attribut transform
anwendet.
- Erstellen Sie eine Instanz der Klasse
SVGDocument. Die Eigenschaft
RootElement
verweist auf das Stammelement<svg>
des Dokuments. - Erstellen Sie ein
<circle>
-Element und legen Sie die erforderlichen Attribute fest.- Sie können die Methode CreateElementNS() verwenden, um eine Instanz der Klasse SVGCircleElement zu erstellen.
- Rufen Sie die Methode
SetAttribute() auf, um Attribute festzulegen, die Position, Größe, Füllung und Transformation angeben. Verwenden Sie die Funktion
scale()
für das Attributtransform
, das eine Skalierungstransformation angibt. Insbesondere bedeutetscale(2)
, das<circle>
-Element sowohl in der x- als auch in der y-Dimension um den Faktor 2 zu skalieren.
- Um das
circleElement
zusvgElement
hinzuzufügen, können Sie die Methode AppendChild() verwenden. - Rufen Sie die Methode Save() auf, um das resultierende SVG-Bild in einer durch den Pfad angegebenen lokalen Datei zu speichern.
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 }
SVG-Transformationsmatrix – Skalierungsmatrix
Hier sehen wir uns das C#-Beispiel für die Skalierung eines gesamten SVG-Bildes anstelle eines einzelnen Elements an und implementieren die Transformation mithilfe einer Skalierungsmatrix. Schauen wir uns den C#-Code zum Anwenden der Skalenmatrix genauer an.
- Laden Sie eine SVG-Quelldatei mit einem der SVGDocument()-Konstruktoren.
- Holen Sie sich das Stammelement
<svg>
des Dokuments.
- Hinweis: Um eine Transformation auf das gesamte SVG-Bild anzuwenden, müssen Sie das Attribut
transform
auf das Stammelement<svg>
anwenden.
- Verwenden Sie die Methode
GetCTM() der Klasse SVGGraphicsElement, die die aktuelle Transformationsmatrix (CTM) zurückgibt, die dem Element
<svg>
zugeordnet ist. Das CTM stellt die kumulativen Transformationen dar, die auf das Element angewendet werden, und enthält Informationen zu Übersetzung, Skalierung, Skalierung und Verzerrung, die auf das Element angewendet werden können. - Nachdem Sie das CTM erhalten haben, verwenden Sie die Methode
Scale(), die eine Skalentransformation auf der aktuellen Matrix nachmultipliziert und die resultierende Matrix zurückgibt. Die Scale(scaleFactor)-Methode benötigt nur ein Argument –
scaleFactor
. Dieser Parameter ist obligatorisch und stellt die Skalierung sowohl auf der X- als auch auf der Y-Achse dar, die Sie anwenden möchten. - Konstruieren Sie ein
transformAttribute
– eine String-Darstellung einer 2D-Transformationsmatrix unter Verwendung der Werte aus der modifizierten TransformationsmatrixtransformationMatrix
. Die Matrixschreibweise ist matrix(a, b, c, d, e, f). - Rufen Sie die Methode
SetAttribute() auf, um das Attribut
transform
des Elements<svg>
mithilfe der ZeichenfolgetransformAttribute
festzulegen. - Rufen Sie die Methode Save() auf, um das resultierende SVG-Bild in einer lokalen Datei zu speichern.
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 }
Die folgende Abbildung zeigt das Original-SVG (a) und das skalierte Bild mit einem Skalierungsfaktor von 0,5 – das verkleinerte Bild (b).
Siehe auch
- Sie können die vollständigen Beispiele und Datendateien von
GitHub herunterladen.
- Informationen zum Herunterladen von GitHub und zum Ausführen von Beispielen finden Sie im Abschnitt
So führen Sie die Beispiele aus.
- Um zu erfahren, wie Sie eine Transformationsmatrix zum Drehen, Skalieren, Übersetzen und Verzerren von SVG-Grafiken verwenden und SVG-Codebeispiele berücksichtigen, lesen Sie bitte den Artikel
Transformationsmatrix – SVG-Codebeispiele.
- Lesen Sie den Artikel SVG-Transformation, um mehr zu erfahren und SVG-Codebeispiele zum Drehen, Skalieren, Verschieben und Neigen von SVG-Grafiken mithilfe des SVG-Transformationsattributs zu erhalten.