Desenvolvimento - HTML

Introdução ao SVG (Scalable Vector Graphics)

Veja neste artigo uma breve introdução ao SVG (Scalable Vector Graphics), uma linguagem no padrão XML utilizada para representar, de forma vetorial, gráficos bidimensionais em páginas web.

por Diego Cesar Ribeiro



"SVG é a abreviatura de Scalable Vector Graphics que pode ser traduzido do inglês como “gráficos vetoriais escaláveis”. Trata-se de uma linguagem XML para descrever de forma vetorial desenhos e gráficos bidimensionais, quer de forma estática ou dinâmica. Uma das principais características dos gráficos vetoriais, é que estes não perdem qualidade ao serem ampliados. A grande diferença entre o SVG e outros formatos vetoriais, é o fato de ser um formato aberto, não sendo propriedade de nenhuma empresa. Foi criado pela World Wide Web Consortium (W3C), responsável pela definição de outros padrões, como o HTML e o XHTML."
Fonte: Wikipedia

Diferença entre imagem comum e SVG

Figura 1: Diferença entre imagem comum e SVG

Rect

Exemplo de rect

Figura 2: Exemplo de rect

O primeiro shape que irei apresentar será o rect, que tem forma de retângulo.

Listagem 1: Código do shape rect SVG

<html>
<body>
<svg>
  <rect width="300" height="100"
  style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</svg>
</body>
</html>

Para criar um SVG, você deverá usar a tag svg, e será dentro dela que o formato será definido. A largura e a altura do SVG serão definidas pelos valores das propriedades width e height respectivamente. A propriedade fill:rgb irá definir a cor de fundo do SVG através do RGB. O stroke é a propriedade que define as configurações da borda. O stroke-width define a largura da borda, e o stroke:RGB define a cor da borda. Você também poderia deixar as bordas redondas, bastaria adicionar rx="20" ry="20".

Exemplo de rect com bordas arredondadas

Figura 3: Exemplo de rect com bordas arredondadas

Circle

Exemplo de circle

Figura 4: Exemplo de circle

Listagem 2: Código do shape circle SVG

<svg>
  <circle cx="100" cy="50" r="40" stroke="black"
  stroke-width="2" fill="red"/>
</svg>

Esse último shape irá fazer um objeto em forma de círculo. A propriedade cx difinirá o quão distanciado o círculo estará do lado esquerdo da tela, e o cy irá definir o quão distante estará do topo da página. As demais propriedades funcionam da mesma forma que no exemplo anterior.

Ellipse

Exemplo de ellipse

Figura 5: Exemplo de ellipse

Listagem 3: Código do shape ellipse SVG.

<svg>
  <ellipse cx="130" cy="80" rx="100" ry="50"
  style="fill:yellow;stroke:purple;stroke-width:2"/>
</svg>

O objeto ellipse irá criar como que um círculo, mas com a propriedade de poder ser esticada para cima ou para baixo através das propriedades rx e ry.

Line

Exemplo de line

Figura 6: Exemplo de line

Listagem 4: Código do shape line SVG.

<svg>
  <line x1="0" y1="0" x2="200" y2="200"
  style="stroke:rgb(255,0,0);stroke-width:2"/>
</svg>

O objeto line irá criar uma linha reta. As propriedades x1 e y1 irão definir a distancia do começo da linha à parte superior esquerda da página. E as propriedades x2 e y2 irão definir a distancia, em pixels, do fim da linha a parte superior esquerda da página.

Em line, você também poderá usar as propriedades stroke-linecap e stroke-dasharray. O stroke-linecap:round irá fazer com que as bordas da linha fiquem arredondadas, e o stroke-dasharray irá criar uma sequencia de cortes e preenchimentos. Por exemplo, a sequencia 5,10,15 vai criar uma linha com 5 de tamanho, logo depois, um espaço de tamanho 10, logo depois, outra linha de tamanho 15, e então volta ao começo. Veja o exemplo abaixo:

 Exemplo de linhas com as propriedades stroke-linecap e stroke-dasharray

Figura 7: Exemplo de linhas com as propriedades stroke-linecap e stroke-dasharray

Listagem 5: Código do SVG lile com as propriedades stroke-linecap e stroke-dasharray

<svg>
<line x1="10" y1="10" x2="250" y2="10" stroke-linecap="round"
style="stroke:black; stroke-width:20; "/>

<line x1="10" y1="50" x2="250" y2="50" stroke-dasharray="5,5"
style="stroke:black; stroke-width:20; "/>

<line x1="10" y1="90" x2="250" y2="90" stroke-dasharray="5,5,25,10,15"
style="stroke:black; stroke-width:20; "/>
</svg>

Polygon

Exemplo de polygon

Figura 8: Exemplo de polygon

Listagem 6: Código do shape polygon SVG

<svg>
  <polygon points="50,0 0,140 100,140"
  style="fill:lime;stroke:purple;stroke-width:1"/>
</svg>

Agora estudaremos a criação de polígonos. Os polígonos são no mínimo triângulos, mas podem ter infinitos lados, só depende do programador. Para definir esses lados, basta escrever as coordenadas dos pixels de cada ponto. Nesse último exemplo, há um triângulo, mas se eu pusesse as coordenadas 50,0 0,140 100,140, 150, 80 então a figura mudaria para essa logo abaixo (ver figura 9).

Exemplo de polígono com quatro lados

Figura 9: Exemplo de polígono com quatro lados

Polyline

Exemplo de polyline

Figura 10: Exemplo de polyline

Listagem 7: Código do shape polyline SVG

<svg>
  <polyline points="0,40 40,40 40,80 80,80 80,120 120,120 120,160"
  style="fill:white;stroke:red;stroke-width:4"/>
</svg>

O polyline é uma linha com múltiplos vértices (dobras). Cada coordenada que você viu logo acima, representa as coordenadas desses vértices.

text

Exemplo de text

Figura 11: Exemplo de text

Listagem 8: Código do shape text SVG.

<svg>
  <text x="0" y="15" fill="red">Hello Word!</text>
</svg>

Algumas propriedades do SVG

fill Essa propriedade define a cor do fundo SVG em string (azul, verde...)
fill:RGB Essa propriedade define a cor do fundo SVG em RGB(xxx,xxx,xxx)
stroke Define a cor da borda em string
stroke-width Define a largura da borda
stroke:RGB Define a cor da borda em RGB
opacity Define a opacidade (tranparência) do SVG (de 0 a 1)
fill-opacity Define a opacidade do fundo SVG
stroke-opacity Define a opacidade da borda SVG
stroke-linecap Define a dobradura das pontas das linhas
stroke-dasharray Define espaços entre a linha

Aqui termina esse artigo sobre o SVG. Espero que você tenha aprendido a usa-lo, bons estudos.

Diego Cesar Ribeiro

Diego Cesar Ribeiro - Natural de Natal/RN, sou um grande entusiasta sobre tudo relacionado à tecnologia e desenvolvimento. Tenho 4 anos de experiêcia na área de desenvolvimento webstandart (html, css, tableless). Para contatos profissionais me mandem um e-mail.