Canvas e SVG são usados para criar gráficos na Web, mas conseguem isso de maneiras fundamentalmente diferentes, levando a diferenças significativas em suas capacidades e casos de uso.
Canvas: *
baseado em varredura: A tela usa pixels para renderizar gráficos. É como pintar em uma tela digital - você manipula pixels individuais para criar imagens. A ampliação de uma imagem de tela resultará em resultados embaçados e pixelizados, porque você está essencialmente esticando os pixels.
*
manipulação de pixel: Você desenha programaticamente formas, linhas, texto e imagens diretamente na tela usando JavaScript. Não há estrutura inerente ou representação DOM das formas individuais desenhadas.
*
desempenho: Geralmente mais rápido para animações e manipulações complexas envolvendo muitos pixels, especialmente ao lidar com transformações de imagem. Como manipula diretamente os pixels, não precisa analisar ou processar estruturas complexas.
*
Pesquisar e editar: Elementos individuais dentro de uma tela não podem ser selecionados e modificados individualmente após serem desenhados. Para mudar alguma coisa, você redesenham toda a tela.
*
Acessibilidade: Adicionar recursos de acessibilidade (como o texto alt) requer codificação cuidadosa; Os elementos não são inerentemente acessíveis, como estão no SVG.
*
Formatos de arquivo: Normalmente exportado como imagens (PNG, JPG).
svg (gráficos vetoriais escaláveis): *
baseado em vetor: O SVG usa descrições matemáticas para representar formas e caminhos. Isso significa que a imagem é composta por linhas, curvas e formas definidas por suas coordenadas e atributos.
*
DOM baseado: Os elementos SVG fazem parte do DOM (modelo de objeto de documento), o que significa que eles podem ser acessados e manipulados individualmente através do JavaScript. Isso permite uma fácil edição, animação e estilo usando CSS.
*
escalabilidade: As imagens SVG escalam perfeitamente sem perder a qualidade porque não são baseadas em pixels. Aumentar uma imagem SVG não deixa embaçada.
*
Pesquisar e editar: Elementos individuais em uma imagem SVG podem ser selecionados e modificados após a renderização. Você pode até alterar os estilos CSS para afetar vários elementos.
*
Acessibilidade: Os elementos SVG podem incluir atributos que melhoram a acessibilidade (como `ARIA-Label`).
*
Formatos de arquivo: A imagem em si é um arquivo XML.
*
desempenho: Pode ser mais lento que a tela para animações complexas envolvendo muitos elementos, porque o navegador precisa processar o DOM. No entanto, para imagens estáticas ou animações mais simples, a diferença de desempenho geralmente é insignificante.
em suma: | Recurso | Tela | Svg |
| ------------------ | ------------------------------------- | ------------------------------------------ |
|
tipo | Raster | Vetor |
|
escalabilidade | Pobre, pixelates quando escalado | Excelente, escalas sem perda de qualidade |
|
DOM Access | Não, manipulação direta de pixels | Sim, elementos individuais acessíveis |
|
Edição | Redraw para modificar | Modificar elementos individuais |
|
desempenho | Geralmente mais rápido para animações complexas | Pode ser mais lento para animações complexas |
|
Acessibilidade | Requer codificação cuidadosa | Mais fácil de implementar |
Quando usar qual: * Canvas
: Use para animações complexas, jogos, manipulação de imagens e quando o desempenho é crítico, especialmente com muitos pixels.
*
svg: Use para gráficos que precisam escalar sem perder qualidade, logotipos, ilustrações, diagramas e quando você precisa interagir com elementos gráficos individuais. Além disso, prefira o SVG para uma melhor acessibilidade.
Freqüentemente, os desenvolvedores utilizam ambas as tecnologias em um único projeto para alavancar os pontos fortes de cada um. Por exemplo, um jogo pode usar a tela para a animação principal ao usar o SVG para elementos da interface do usuário.