Escalado SVG – ejemplos de C#
Cómo escalar SVG – Código C#
Usando
Aspose.SVG for .NET, puede realizar una transformación de escala mediante programación. Este artículo cubre ejemplos de C# para escalado SVG. Considera casos de uso de la función scale()
en el atributo transform
así como una matriz de transformación – matrix(a,b,c,d,e,f)
.
Función Scale()
El escalado es una transformación SVG que amplía o reduce un objeto utilizando un factor de escala. Hay que distinguir el escalado uniforme y direccional. La función de transformación scale(sx, sy)
permite escalar imágenes a lo largo de los ejes x e y. El valor del factor de escala sy
es opcional y, si se omite, se supone que es igual a sx
.
El siguiente fragmento de código C# demuestra cómo crear un elemento SVG <circle>
, establecer sus atributos y aplicar una transformación usando la función scale()
para el atributo transform
.
- Cree una instancia de la clase
SVGDocument. La propiedad
RootElement
apunta al elemento raíz<svg>
del documento. - Cree un elemento
<circle>
y establezca los atributos requeridos.- Puede utilizar el método CreateElementNS() para crear una instancia de la clase SVGCircleElement.
- Llame al método
SetAttribute() para establecer atributos que especifiquen la posición, el tamaño, el relleno y la transformación. Utilice la función
scale()
para el atributotransform
que especifica una transformación de escala. En particular,scale(2)
significa escalar el elemento<circle>
por un factor de 2 en las dimensiones x e y.
- Para agregar
circleElement
asvgElement
, puede usar el método AppendChild(). - Llame al método Save() para guardar la imagen SVG resultante en un archivo local especificado por la ruta.
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 }
Matriz de transformación SVG - Matriz de escala
Aquí, veremos el ejemplo de C# para escalar una imagen SVG completa en lugar de un solo elemento e implementaremos la transformación usando una matriz de escala. Miremos más de cerca el código C# para aplicar la matriz de escala.
- Cargue un archivo SVG fuente usando uno de los constructores SVGDocument().
- Obtenga el elemento raíz
<svg>
del documento.
- Nota: Para aplicar cualquier transformación a toda la imagen SVG, debe aplicar el atributo
transform
al elemento raíz<svg>
.
- Utilice el método
GetCTM() de la clase SVGGraphicsElement que devuelve la matriz de transformación actual (CTM) asociada con el elemento
<svg>
. El CTM representa las transformaciones acumulativas aplicadas al elemento e incluye información sobre traducción, escala, escala y sesgo que se pueden aplicar al elemento. - Después de obtener el CTM, utilice el método Scale() que multiplica posteriormente una transformación de escala en la matriz actual y devuelve la matriz resultante. El método Scale(scaleFactor) toma solo un argumento: scaleFactor. Este parámetro es obligatorio y representa la escala en los ejes x e y que desea aplicar.
- Construya un
transformAttribute
: una representación de cadena de una matriz de transformación 2D utilizando los valores de la matriz de transformación modificadatransformationMatrix
. La notación matricial es matrix(a, b, c, d, e, f). - Llame al método
SetAttribute() para establecer el atributo
transform
del elemento<svg>
usando la cadenatransformAttribute
. - Llame al método Save() para guardar la imagen SVG resultante en un archivo 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 siguiente figura muestra el SVG original (a) y la imagen escalada con un factor de escala de 0,5: la imagen reducida (b).
Ver también
- Puede descargar los ejemplos completos y los archivos de datos desde
GitHub.
- Encontrará información sobre la descarga desde GitHub y la ejecución de ejemplos en la sección
Cómo ejecutar los ejemplos.
- Para aprender a utilizar una matriz de transformación para rotar, escalar, traducir y sesgar gráficos SVG y considerar ejemplos de código SVG, consulte el artículo
Matriz de transformación: ejemplos de código SVG.
- Lea el artículo Transformación SVG para obtener más información y obtener ejemplos de código SVG para rotar, escalar, mover y sesgar gráficos SVG usando el atributo de transformación SVG.