1. 程式人生 > >前端繪圖方式Canvas和SVG的區別

前端繪圖方式Canvas和SVG的區別

Canvas和SVG是html5中支援2種視覺化技術,都是可以在畫布上繪製圖形和放入圖片。下面來介紹和分析一下他們。

一.Canvas 和 SVG 簡介

1.什麼是Canvas?

Canvas 是H5新出來的標籤<canvas></canvas>

Canvas畫布,利用JavaScript在網頁繪製圖像

在標籤中給上寬高:<canvas width="800" height="800"></canvas>   不用加單位

如果在css中給寬高 會對影象造成拉伸 (預設寬高300px*150px)

通過過去繪製工具  .getContext("2d") 來在畫布中繪製圖形

2.什麼是SVG?

SVG 可縮放向量圖形(Scalable Vector Graphics),基於可擴充套件標記語言XML  出來的時間比較老

SVG 用來定義用於網格的基於向量的圖形

二.Canvas 和 SVG 區別

 

1.繪製的圖片格式不同

Canvas 的工具getContext 繪製出來的圖形或傳入的圖片都依賴解析度,能夠以 .png 和 .jpg格式儲存儲存影象,可以說是點陣圖

SVG 可以在H5中直接繪製,但繪製的是向量圖

由於點陣圖依賴解析度,向量圖不依賴解析度,所以Canvas和SVG的圖片格式的不同實際上是他們繪製出來的圖片的格式不同造成的。

 

2.Canvas不支援事件處理器,SVG支援事件處理器

Canvas 繪製的影象 都在Canvas這個畫布裡面,是Canvas的一部分,不能用js獲取已經繪製好的圖形元素。

如下:

 

在控制檯中可以看到canvas標籤裡面是沒有單獨的長方形存在的。

Canvas就像動畫,每次顯示全部的一幀的內容,想改變裡面某個元素的位置或者變化需要在下一幀中全部重新顯示。

 

 

而SVG繪圖時,每個圖形都是以DOM節點的形式插入到頁面中,可以用js或其他方法直接操作

如下:

效果:

可以看出svg 標籤下面多了兩個矩形的標籤

下面我們來操作新出來的矩形標籤:

 給上rect標籤id  r1 和 r2

獲取元素

 var rect1 = document.getElementById("r1");

 var rect2 = document.getElementById("r2");

改變元素的填充顏色:

rect1.style.fill = "yellow";

rect2.style.fill = "pink";

效果:

SVG 中 每個被繪製的圖形都被視為物件,如果SVG物件的屬性發生變化,那麼瀏覽器能夠自動重現圖形。

 

3.適用範圍不同

由於Canvas 和 SVG 的工作機制不同,

Canvas是逐畫素進行渲染的,一旦圖形繪製完成,就不會繼續被瀏覽器關注。而SVG是通過DOM操作來顯示的。

所以Canvas的文字渲染能力弱,而SVG最適合帶有大型渲染區域的應用程式,比如地圖。

而Canvas 最適合有許多物件要被頻繁重繪的圖形密集型遊戲。

而SVG由於DOM操作 在複雜度高的遊戲應用中 會減慢渲染速度。所以不適合在遊戲應用。