1. 程式人生 > >SVG 教程01

SVG 教程01

什麼是SVG?

  • SVG 指可伸縮向量圖形 (Scalable Vector Graphics)
  • SVG 用來定義用於網路的基於向量的圖形
  • SVG 使用 XML 格式定義圖形
  • SVG 影象在放大或改變尺寸的情況下其圖形質量不會有所損失
  • SVG 是全球資訊網聯盟的標準
  • SVG 與諸如 DOM 和 XSL 之類的 W3C 標準是一個整體

SVG 的歷史和優勢

在 2003 年一月,SVG 1.1 被確立為 W3C 標準。

參與定義 SVG 的組織有:太陽微系統、Adobe、蘋果公司、IBM 以及柯達。

與其他影象格式相比,使用 SVG 的優勢在於:

  • SVG 可被非常多的工具讀取和修改(比如記事本)
  • SVG 與 JPEG 和 GIF 影象比起來,尺寸更小,且可壓縮性更強。
  • SVG 是可伸縮的
  • SVG 影象可在任何的解析度下被高質量地列印
  • SVG 可在影象質量不下降的情況下被放大
  • SVG 影象中的文字是可選的,同時也是可搜尋的(很適合製作地圖)
  • SVG 可以與 Java 技術一起執行
  • SVG 是開放的標準
  • SVG 檔案是純粹的 XML

SVG 的主要競爭者是 Flash。

與 Flash 相比,SVG 最大的優勢是與其他標準(比如 XSL 和 DOM)相相容。而 Flash 則是未開源的私有技術。

SVG 例項

下面的例子是一個簡單的 SVG 檔案的例子。SVG 檔案必須使用 .svg 字尾來儲存:

<?xml version="1.0" standalone="no"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

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

</
svg>

程式碼解釋:

第一行包含了 XML 宣告。請注意 standalone 屬性!該屬性規定此 SVG 檔案是否是“獨立的”,或含有對外部檔案的引用。

standalone="no" 意味著 SVG 文件會引用一個外部檔案 - 在這裡,是 DTD 檔案。

第二和第三行引用了這個外部的 SVG DTD。該 DTD 位於 “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”。該 DTD 位於 W3C,含有所有允許的 SVG 元素。

SVG 程式碼以 <svg> 元素開始,包括開啟標籤 <svg> 和關閉標籤 </svg> 。這是根元素。width 和 height 屬性可設定此 SVG 文件的寬度和高度。version 屬性可定義所使用的 SVG 版本,xmlns 屬性可定義 SVG 名稱空間。

SVG 的 <circle> 用來建立一個圓。cx 和 cy 屬性定義圓中心的 x 和 y 座標。如果忽略這兩個屬性,那麼圓點會被設定為 (0, 0)。r 屬性定義圓的半徑。

stroke 和 stroke-width 屬性控制如何顯示形狀的輪廓。我們把圓的輪廓設定為 2px 寬,黑邊框。

fill 屬性設定形狀內的顏色。我們把填充顏色設定為紅色。

關閉標籤的作用是關閉 SVG 元素和文件本身。

註釋:所有的開啟標籤必須有關閉標籤!

HTML 頁面中的 SVG

SVG 檔案可通過以下標籤嵌入 HTML 文件:<embed>、<object> 或者 <iframe>

HTML 頁面中的 SVG

下面,你會看到三種把 SVG 檔案嵌入 HTML 頁面的不同方法。

使用 <embed> 標籤

<embed> 標籤被所有主流的瀏覽器支援,並允許使用指令碼。

註釋:當在 HTML 頁面中嵌入 SVG 時使用 <embed> 標籤是 Adobe SVG Viewer 推薦的方法!然而,如果需要建立合法的 XHTML,就不能使用 <embed>。任何 HTML 規範中都沒有 <embed> 標籤。

語法:

<embed src="rect.svg" width="300" height="100" 
type="image/svg+xml"
pluginspage="http://www.adobe.com/svg/viewer/install/" />

  

註釋:pluginspage 屬性指向下載外掛的 URL。

使用 <object> 標籤

<object> 標籤是 HTML 4 的標準標籤,被所有較新的瀏覽器支援。它的缺點是不允許使用指令碼。

註釋:假如您安裝了最新版本的 Adobe SVG Viewer,那麼當使用 <object> 標籤時 SVG 檔案無法工作(至少不能在 IE 中工作)!

語法:

<object data="rect.svg" width="300" height="100" 
type="image/svg+xml"
codebase="http://www.adobe.com/svg/viewer/install/" />

  

註釋:codebase 屬性指向下載外掛的 URL。

使用 <iframe> 標籤

<iframe> 標籤可工作在大部分的瀏覽器中。

語法:

<iframe src="rect.svg" width="300" height="100">
</iframe>

  

我期望....

如果僅僅通過引用 SVG 的名稱空間,就能夠把 SVG 元素之間新增到 HTML 程式碼中,那就太棒了,這像這樣:

<html xmlns:svg="http://www.w3.org/2000/svg">
<body>

<p>This is an HTML paragraph</p>

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

</body>
</html>