Transformaciones SVG – conceptos básicos, ejemplos de código SVG

SVG permite modificar elementos gráficos mediante traducción, rotación, escala y sesgo. Todas estas transformaciones SVG se refieren al tipo geométrico. Los objetos SVG se pueden modificar utilizando las propiedades del atributo transform: translate, scale, rotate, skewX, skewY y matrix.

Traducción SVG – SVG Translation

La translation mueve todos los puntos del objeto a la misma distancia a lo largo de líneas paralelas. Esto puede interpretarse como un desplazamiento del origen del sistema de coordenadas del elemento. Hay tres funciones de transformación: translateX (tx), translateY (ty) y translate (tx, ty). La función translate (tx, ty) mueve un elemento en un valor tx a lo largo del eje x y en ty a lo largo del eje y. Si uno de los valores no se especifica, el valor predeterminado es cero.

La acción del atributo transform="translate(tx, ty)" significa el cambio de las coordenadas del objeto según la fórmula:

x(nuevo) = x(antiguo) + tx

y(nuevo) = y(antiguo) + ty

Aquí hay un ejemplo simple:

 1<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> 
 2    <g fill="none">
 3        <!-- no translation -->
 4        <circle cx="15" cy="15" r="10" stroke="blue" />
 5        <!-- horizontal translation -->
 6        <circle cx="15" cy="15" r="10" stroke="black" transform="translate(22)" />
 7        <circle cx="15" cy="15" r="10" stroke="red" transform="translate(44)" />
 8        <!-- both horizontal and vertical translation -->
 9        <circle cx="15" cy="15" r="10" stroke="green" transform="translate(33,13)" />
10        <circle cx="15" cy="15" r="10" stroke="yellow" transform="translate(11,13)" />
11	</g>
12</svg>

En el ejemplo de código, el elemento <g> se utiliza para agrupar círculos. El atributo fill se aplica dentro de <g> a todas las formas una vez. Aquí está la imagen resultante ( translation.svg):

Texto “Cinco anillos olímpicos como ilustración de una transformación de traducción”

Escalada SVG – SVG Scaling

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 la imagen a lo largo de los ejes x e y. Esta función toma uno o dos valores que especifican la escala horizontal y vertical: transform="scale(<sx> [<sy>])". El valor del factor de escala sy es opcional y, si se omite, se supone que es igual a sx.

 1<svg viewBox="-50 -50 200 200" xmlns="http://www.w3.org/2000/svg">
 2    <!-- uniform scale -->
 3    <circle cx="0" cy="0" r="10" fill="#B0C4DE" transform="scale(4)" />
 4    <circle cx="0" cy="0" r="10" fill="#DDA0DD" transform="scale(3)" />
 5    <circle cx="0" cy="0" r="10" fill="#FFB6C1" transform="scale(2)" />
 6    <!-- no scale -->
 7    <circle cx="0" cy="0" r="10" fill="#5F9EA0" />
 8    <g transform="translate(100)">
 9        <!-- uniform scale -->
10        <circle cx="0" cy="0" r="10" fill="#B0C4DE" transform="scale(4)" />
11        <!-- vertical scale -->
12        <circle cx="0" cy="0" r="10" fill="#DDA0DD" transform="scale(1,4)" />
13        <!-- horizontal scale -->
14        <circle cx="0" cy="0" r="10" fill="#FFB6C1" transform="scale(4,1)" />
15        <!-- no scale -->
16        <circle cx="0" cy="0" r="10" fill="#5F9EA0" />
17    </g>
18</svg>

Aquí está la imagen resultante ( scaling.svg):

Texto “Cuatro círculos de colores que ilustran la escala.”

El código anterior utiliza las funciones scale y translate. El primer grupo de círculos en la figura muestra un ejemplo de escala uniforme, y el segundo grupo ilustra la escala del círculo a lo largo del eje y (línea 12) y el eje x (línea 14). Un valor de escala de “4” representa un gráfico cuatro veces su tamaño original, mientras que un valor de “4,1” aumenta cuatro veces su ancho de origen y guarda su altura.

Puede cambiar el tamaño de SVG en C# usando Aspose.SVG for .NET API. El artículo Escalado SVG: ejemplos de C# cubre ejemplos de C# para el escalado SVG. Encontrará 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).

Rotación SVG – SVG Rotation

La función rotate(angle, cx, cy) gira el elemento angle alrededor del punto con coordenadas (cx, cy). Si no se especifican coordenadas, la rotación se realizará alrededor del punto (0, 0) del sistema de coordenadas inicial. Todos los valores de ángulo de rotación o inclinación deben especificarse en grados; no puede utilizar las otras unidades que tenemos disponibles en CSS. Si usamos un valor de ángulo positivo, entonces la rotación será en el sentido de las agujas del reloj y, a la inversa, un valor de ángulo negativo nos dará un giro en el sentido contrario a las agujas del reloj.

Nota: Especificar solo el parámetro angle y cx hace que el valor no sea válido y no se aplica ninguna rotación SVG.

Al igual que translation, SVG rotation no distorsiona el elemento y guarda paralelismo, ángulos y distancias.

1<svg width="450" height="450" xmlns="http://www.w3.org/2000/svg">
2    <rect x="100" y="250" width="200" height="30" fill="CadetBlue" />
3    <rect x="100" y="250" width="200" height="30" fill="#DDA0DD" transform ="rotate(-45 200 265)" />
4    <rect x="100" y="250" width="200" height="30" fill="Pink" transform ="rotate(-90 200 265)" />
5    <rect x="100" y="250" width="200" height="30" fill="#B0C4DE" transform ="rotate(45 200 265)" />
6    <rect x="100" y="250" width="200" height="30" fill="CadetBlue" transform ="rotate(-35)" />
7</svg>

La función transform="rotate(-90 200 265)" utilizada en la línea 4 significa que el rectángulo rosa debe girarse 90 grados en sentido antihorario con el centro de rotación en (200,265). Para el rectángulo en la línea 6, las coordenadas (cx, cy) no se especifican y la rotación de -35 grados se realiza alrededor del punto (0, 0) del sistema de coordenadas inicial. El resultado de la rotación SVG se puede ver en la figura:

Texto “Cinco rectángulos rellenos que ilustran la rotación SVG”

Puede ver y luego guardar el archivo que ilustra la rotación de SVG haciendo clic en el enlace rotation.svg.

Puede rotar SVG en C# usando Aspose.SVG for .NET API. El artículo Rotar SVG – Ejemplos de C# cubre ejemplos de C# para la rotación de SVG. Considera casos de uso de la función rotate() en el atributo transform y la matriz de transformación – matrix(a,b,c,d,e,f).

Sesgado – Skewing

La inclinación es una transformación que gira uno de los ejes del sistema de coordenadas del elemento en un cierto ángulo en el sentido de las agujas del reloj o en el sentido contrario a las agujas del reloj. Los elementos SVG se pueden sesgar mediante el uso de las funciones skewX(angle) y skewY(angle). El valor angle incluido en estas funciones representa una transformación SVG sesgada en grados a lo largo del eje apropiado. Al usar skewX(angle), solo cambia la coordenada x de los puntos de la forma, pero la coordenada y permanece sin cambios. La función skewX(angle) hace que las líneas verticales parezcan haber sido giradas en un ángulo determinado. La coordenada x de cada punto cambia en un valor proporcional al ángulo especificado y la distancia al origen.

Aquí se muestra un ejemplo del círculo con el valor skewX(55) ( sqew-x.svg):

1<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
2    <circle cx="20" cy="20" r="15" stroke="blue" fill="none" />
3    <circle cx="20" cy="20" r="15" stroke="grey" stroke-opacity="0.7" fill="none" transform="skewX(55)" />
4</svg>

Un ejemplo simple del rectángulo sesgado por la función skewY(35) ( sqew-y.svg):

1<svg  width="800" height="800" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
2   <rect x="20" y="20" width="30" height="30" stroke="blue" stroke-opacity="1" fill="none" />
3   <rect x="20" y="20" width="30" height="30" stroke="grey" stroke-opacity="0.5" fill="none" transform="skewY(35)" />
4 </svg>

Los ejemplos renderizados se ven así:

Texto “Círculo y rectángulo antes y después de aplicar las funciones skewX y skewY.”

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.

Lea el artículo Transformaciones SVG – ejemplos de C# para obtener ejemplos de código C# para rotar, escalar, mover y sesgar gráficos SVG usando Aspose.SVG para la biblioteca .NET.

Aspose.SVG ofrece Aplicaciones web gratuitas SVG para convertir archivos SVG o de imágenes, fusionar archivos SVG, vectorizar imágenes, generar sprites SVG, codificar datos SVG a base64 y vectorizar texto. Estas aplicaciones en línea funcionan en cualquier sistema operativo con un navegador web y no requieren instalación de software adicional. ¡Es una manera rápida y fácil de resolver de manera eficiente y efectiva sus tareas relacionadas con SVG!

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.