Canvas en SVG worden beide gebruikt voor het maken van afbeeldingen op internet, maar ze bereiken dit op fundamenteel verschillende manieren, wat leidt tot aanzienlijke verschillen in hun mogelijkheden en gebruiksscenario's.
Doek:
* Rastergebaseerd: Canvas gebruikt pixels om afbeeldingen weer te geven. Het is net als schilderen op een digitaal canvas:je manipuleert individuele pixels om afbeeldingen te creëren. Het opschalen van een canvasafbeelding zal resulteren in wazige, korrelige resultaten, omdat u in feite de pixels uitrekt.
* Pixelmanipulatie: Met JavaScript tekent u programmatisch vormen, lijnen, tekst en afbeeldingen rechtstreeks op het canvas. Er is geen inherente structuur of DOM-weergave van de individuele getekende vormen.
* Prestaties: Over het algemeen sneller voor complexe animaties en manipulaties waarbij veel pixels betrokken zijn, vooral als het om beeldtransformaties gaat. Omdat het pixels rechtstreeks manipuleert, hoeft het geen complexe structuren te ontleden of te verwerken.
* Zoeken en bewerken: Individuele elementen binnen een canvas kunnen niet afzonderlijk worden geselecteerd en gewijzigd nadat ze zijn getekend. Om iets te veranderen, teken je het hele canvas opnieuw.
* Toegankelijkheid: Het toevoegen van toegankelijkheidsfuncties (zoals alternatieve tekst) vereist zorgvuldige codering; de elementen zijn niet inherent toegankelijk zoals in SVG.
* Bestandsformaten: Meestal geëxporteerd als afbeeldingen (PNG, JPG).
SVG (schaalbare vectorafbeeldingen):
* Vectorgebaseerd: SVG gebruikt wiskundige beschrijvingen om vormen en paden weer te geven. Dit betekent dat de afbeelding is samengesteld uit lijnen, curven en vormen, gedefinieerd door hun coördinaten en attributen.
* DOM-gebaseerd: SVG-elementen maken deel uit van het DOM (Document Object Model), wat betekent dat ze individueel toegankelijk en gemanipuleerd kunnen worden via JavaScript. Dit maakt eenvoudige bewerking, animatie en styling mogelijk met behulp van CSS.
* Schaalbaarheid: SVG-afbeeldingen schalen perfect zonder kwaliteitsverlies, omdat ze niet op pixels zijn gebaseerd. Het vergroten van een SVG-afbeelding maakt deze niet wazig.
* Zoeken en bewerken: Individuele elementen binnen een SVG-afbeelding kunnen na het renderen worden geselecteerd en gewijzigd. U kunt zelfs CSS-stijlen wijzigen om meerdere elementen te beïnvloeden.
* Toegankelijkheid: SVG-elementen kunnen attributen bevatten die de toegankelijkheid verbeteren (zoals `aria-label`).
* Bestandsformaten: De afbeelding zelf is een XML-bestand.
* Prestaties: Kan langzamer zijn dan canvas voor complexe animaties met veel elementen, omdat de browser de DOM moet verwerken. Bij statische afbeeldingen of eenvoudigere animaties is het prestatieverschil echter vaak verwaarloosbaar.
In het kort:
| Kenmerk | Doek | SVG |
|--------------|------------------------------------|--------------------------------------|
| Typ | Rooster | Vector |
| Schaalbaarheid | Slecht, pixeleert bij schaalvergroting | Uitstekend, schaalt zonder kwaliteitsverlies |
| DOM-toegang | Nee, directe pixelmanipulatie | Ja, individuele elementen toegankelijk |
| Bewerken | Opnieuw tekenen om te wijzigen | Afzonderlijke elementen aanpassen |
| Prestaties | Over het algemeen sneller voor complexe animaties | Kan langzamer zijn voor complexe animaties |
| Toegankelijkheid | Vereist zorgvuldige codering | Gemakkelijker te implementeren |
Wanneer gebruik je welke:
* Doek: Gebruiken voor complexe animaties, games, beeldmanipulatie en wanneer prestaties van cruciaal belang zijn, vooral bij veel pixels.
* SVG: Gebruik dit voor afbeeldingen die moeten worden geschaald zonder kwaliteitsverlies, logo's, illustraties, diagrammen en wanneer u met afzonderlijke grafische elementen moet communiceren. Geef ook de voorkeur aan SVG voor een betere toegankelijkheid.
Vaak gebruiken ontwikkelaars beide technologieën in één project om de sterke punten van elk te benutten. Een game kan bijvoorbeeld Canvas gebruiken voor de hoofdanimatie, terwijl SVG wordt gebruikt voor UI-elementen. |