DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> HTML基礎知識 >> HTML5詳解 >> HTML5之SVG 2D入門1—SVG(可縮放矢量圖形)概述
HTML5之SVG 2D入門1—SVG(可縮放矢量圖形)概述
編輯:HTML5詳解     
位圖與矢量圖 
以前,浏覽器中顯示的圖形,例如jpeg、gif等,都是位圖,這些圖像格式是基於光柵的。在光柵圖像中,圖像文件定義了圖像中每個像素的顏色值。浏覽器需要讀取這些值並做出相應行動。這種圖像的再現能力比較強,但是在某些情形下會顯得不足。例如,當浏覽器以不同大小顯示一副圖像時,通常會產生鋸齒邊緣,這時,浏覽器不得不為那些在原始圖像中不存在的像素插入或猜測數值;這樣會導致圖像失真。此外,針對位圖進行動畫,最多也僅限於生成“翻動書本”類型的動畫,即快速連續地顯示單獨圖像。

矢量圖通過指定為確定每個像素的值所需的指令而不是指定這些值本身,克服了這些困難中的一部分。例如,向量圖形不再為一個直徑一英寸的圓提供像素值,而是告訴浏覽器創建一個直徑一英寸的圓,然後讓浏覽器(或插件)做其余事情。這消除了光柵圖形的許多限制;使用向量圖形,浏覽器只要知道它必須畫一個圓。如果圖像需要以正常大小的三倍來顯示,那麼浏覽器只要按正確的大小畫圓而不必執行光柵圖像通常的插入法。類似地,浏覽器接收的指令可以更容易地與外部信息源(如應用程序和數據庫)綁定,要對圖像制作動畫,浏覽器只要接收有關如何操縱屬性(如半徑或顏色)的指令即可。 
Html體系中,最常用的繪制矢量圖的技術是SVG和Html5新增加的canvas元素。這兩種技術都支持繪制矢量圖和光柵圖。

SVG概述 
可縮放矢量圖形(Scalable Vector Graphics,簡稱SVG)是一種使用XML來描述二維圖形的語言(SVG嚴格遵從XML語法)。 SVG允許三種類型的圖形對象:矢量圖形形狀(例如由直線和曲線組成的路徑)、圖像和文本。 可以將圖形對象(包括文本)分組、樣式化、轉換和組合到以前呈現的對象中。 SVG 功能集包括嵌套轉換、剪切路徑、alpha 蒙板和模板對象。

SVG繪圖是交互式和動態的。 例如,可使用腳本來定義和觸發動畫。這一點與Flash相比很強大。Flash是二進制文件,動態創建和修改都比較困難。而SVG是文本文件,動態操作是相當容易的。而且,SVG直接提供了完成動畫的相關元素,操作起來非常方便。 

SVG與其他Web標准兼容,並直接支持文檔對象模型DOM。這一點也是與HTML5中的canvas相比很強大的地方(這裡注意,SVG內部也是用一個類似的canvas這樣的東西來展示SVG圖形,到後面你會發現很多特性和Html5的canvas還有點像;文中如果沒明確說明是SVG的canvas的話,都代指Html5中的canvas元素)。因而,可以很方便的使用腳本實現SVG的很多高級應用。而且SVG的圖形元素基本上都支持DOM中的標准事件。可將大量事件處理程序(如“onmouSEOver”和“onclick”)分配給任何SVG圖形對象。 雖然SVG的渲染速度比不上canvas元素,但是勝在DOM操作很靈活,這個優勢完全可以彌補速度上的劣勢。 

SVG既可以說是一種協議,也可以說是一門語言;既是Html的一個標准元素,也是一種圖片格式。 
SVG並不是Html5中的東西,但是也算頁面時興的技術之一,姑且也放到這個專題下了。

SVG與其它圖片格式的比較 
SVG與其它的圖片格式相比,有很多優點(很多優點來源於矢量圖的優點): 
• SVG文件是純粹的XML, 可被非常多的工具讀取和修改(比如記事本)。 
• SVG 與JPEG 和GIF圖像比起來,尺寸更小,且可壓縮性更強。 
• SVG 是可伸縮的,可在圖像質量不下降的情況下被放大,可在任何的分辨率下被高質量地打印。 
• SVG 圖像中的文本是可選的,同時也是可搜索的(很適合制作地圖)。 
• SVG 可以與 Java 技術一起運行。 
• SVG 是開放的標准。 

SVG與Flash的比較 
SVG 的主要競爭者是Flash。與Flash相比,SVG 最大的優勢是它與其他標准(比如XSL和DOM)相兼容,操作方便,而Flash則是未開源的私有技術。其它的比如存儲的格式,動態生成圖形等方面,SVG也占有很大的優勢。

SVG的呈現方式 
關於支持Html5與SVG的浏覽器不是這裡討論的重點,基本上裝上最新的Chrome或者Firefox浏覽器就差不多了(IE用戶請裝IE9就對了,至於IE9之前的版本,需要裝SVG的插件,這裡就直接略過了)。對於直接支持SVG的浏覽器,SVG主要采用兩面兩種呈現的方式。

內聯到Html 
SVG是標准的HTML元素,直接寫到Html中就可以了,看下面的例子: 

復制代碼代碼如下:www.mb5u.com
<?XML version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Html> 
<Html> 
<head> 
<!-- <meta content="text/Html; charset=utf-8" http-equiv="Content-Type" /> --> 
<title> My First SVG Page</title> 
</head> 
<body> 
<svg XMLns="http://www.w3.org/2000/svg" version="1.1" 
width="200px" height="200px"> 
<rect x="0" y="0" width="100%" height="100%" 
fill="none" stroke="black"/> 
<circle cx="100" cy="100" r="50" 
style="stroke: black; fill: red;"/> 
</svg> 
</body> 
</Html> 

請注意開頭的部分xml聲明,與svg的命名空間XMLns、版本version等部分,主要是考慮兼容性的問題;這些部分在Html5中基本都可以不用寫了(寫不寫還是自己瞧著辦吧)。 

獨立SVG文件 
獨立SVG指的是通過使用svg文件擴展名來提供向量圖形文件格式。在浏覽器中嵌入這個svg文件就可以使用了。 
1.獨立的SVG文件/頁面,定義的模板基本就像下面的一樣: 

復制代碼代碼如下:www.mb5u.com
<svg width="100%" height="100%"> 
<!-- SVG markup here. --> 
</svg> 

把這樣的文本文件保存成以svg為擴展名的文件,例如sun.svg,這樣的文件可以直接用浏覽器打開浏覽,也可以作為引用嵌入到別的頁面中。 
2.Html引用外部的SVG文件。 
使用object或者img元素嵌入svg圖形就可以了,例如下面的小例子: 

復制代碼代碼如下:www.mb5u.com
<!DOCTYPE Html> 
<Html> 
<head> 
<title> My First SVG Page</title> 
</head> 
<body> 
<object data="sun.svg" type="image/svg+XML" 
width="300px" height="300px"> 
<!-- Implement fallback code here, or display a message: --> 
<p>Your browser does not support SVG - please upgrade to a modern browser.</p> 
</object> 
<img src="sun.svg" alt="svg not supported!" /> 
</body> 
</Html> 

其實SVG也可以放在其他的XML文檔中,也可以像其他的XML文檔一樣,使用XML相關的技術格式化和驗證,這個不是重點,此處略去了。 

SVG的渲染順序 
SVG是嚴格按照定義元素的順序來渲染的,這個與Html靠z-index值來控制分層不一樣。在SVG中,寫在前面的元素先被渲染,寫在後面的元素後被渲染。後渲染的元素會覆蓋前面的元素,雖然有時候受透明度影響,看起來不是被覆蓋的,但是SVG確實是嚴格按照先後順序來渲染的。 
注意:SVG是以XML定義的,所以是大小寫敏感的,這點與Html不一樣。

實用參考
官方文檔:http://www.w3.org/TR/SVG11/
腳本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).ASPx
開發中心:https://developer.mozilla.org/en/SVG
熱門參考:http://www.chinasvg.com/
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved