1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SVG 矢量图形

SVG 矢量图形

时间:2023-03-22 17:22:39

相关推荐

SVG 矢量图形

Svg: Scalable Vector Graphics

可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准。

特性及优点

1 用来定义用于网络的基于矢量的图形

2 使用 XML 格式定义图形

3 图像在放大或改变尺寸的情况下其图形质量不会有所损失

4 是万维网联盟的标准

5 与诸如 DOM和 XSL 之类的W3C标准是一个整体

6 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。

7 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)

8 可以与 Java 技术一起运行

9 是开放的标准

10 文件是纯粹的 XML

11 具有交互性和动态性

12 完全支持DOM

列了那么多基本可以忽视的,最实用的是用在展示大数据方面(折线图、k线图、雷达图等)

图片的数字化将图片存储为数据有两种方案。其一为位图,也被称为光栅图。即是以自然的光学的眼光将图片看成在平面上密集排布的点的集合。每个点发出的光有独立的频率和强度,反映在视觉上,就是颜色和亮度。这些信息有不同的编码方案,在互联网上最常见的就是RGB。根据需要,编码后的信息可以有不同的位(bit)数——位深。位数越高,颜色越清晰,对比度越高;占用的空间也越大。另一项决定位图的精细度的是其中点的数量。一个位图文件就是所有构成其的点的数据的集合,它的大小自然就等于点数乘以位深。位图格式是一个庞大的家族,包括常见的JPEG/JPG, GIF, TIFF, PNG, BMP。

第二种方案为矢量图。它用抽象的视角看待图形,记录其中展示的模式而不是各个点的原始数据。它将图片看成各个“对象”的组合,用曲线记录对象的轮廓,用某种颜色的模式描述对象内部的图案(如用梯度描述渐变色)。比如一张留影,被看成各个人物和背景中各种景物的组合。这种更高级的视角,正是人类看世界时在意识里的反映。矢量图格式有CGM, SVG, AI (Adobe Illustrator), CDR (CorelDRAW), PDF,SWF, VML等等。

矢量图中简单的几何图形,只需要几个特征数值,就可以确定。比如三角形,只需要确定三个顶点的坐标。圆只需要确定圆心的坐标和半径。描述它的函数已知的曲线也只需要几个参数就能够确定。如正弦曲线、各种螺线等等。如果用位图记录这些几何图案,则需要包含组成线条的各个像素的数据。除了大大节省空间,矢量图还具有完美的伸缩性。因为记录的是图形的特征,图形的尺寸任意变化时,都只是做着相似变换,不会出现模糊和失真。相反位图的图片放大到超出原有大小时,各个像素点之间出现空缺,即使用某种算法填充,也会出现模糊锯齿等现象,不如矢量图精确。因而矢量图很适合用于记录诸如符号、图标等简单的图形。而位图则适合于没有明显规律的、颜色丰富细腻的图片。

SVG包括3种类型的对象:矢量图形(包括直线、曲线在内的图形边)、点阵图像和文本。各种图像对象能够组合、变换,并且修改其样式,也能够定义成预处理对象。

下面为实例:

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="/1999/xhtml">

<head></head>

<body>

<script type="text/javascript">

//椭圆的计算公式, y^2/b^2+x^2/a^2=1

functiondraw() {

// 画圆弧

var a = 45, b = 22, x0 = 10;

var u = [];

for (var i = -30; i < 30; i++) {

var y = (1 - i * i / (a * a)) *b * b;

y = Math.sqrt(y);

//移动

var x = i + 200;

y = 70 + y;

u.push(x + ',' + y.toFixed(0))

}

// 画圆弧

var a = 50, b = 25, x0 = 10;

for (var i = 40; i > -40; i--) {

var y = (1 - i * i / (a * a)) *b * b;

y = Math.sqrt(y);

//移动

var x = i + 200;

y = 100 + y;

u.push(x + ',' + y.toFixed(0))

}

point = u.join(" ")

document.getElementById("polygon").setAttribute("points",point)

document.getElementById("polygon2").setAttribute("points",point)

}

window.onload = draw

</script>

<div id="div"></div>

<svg id="ad" width="750" height="300"version="1.1" xmlns="/2000/svg">

<!--模糊特效-->

<filter id="Gaussian_Blur">

<feGaussianBlur in="SourceGraphic"stdDeviation="2" />

</filter>

<!--线性渐变-->

<linearGradient id="orange_red" x1="0%"y1="0%" x2="100%" y2="0%">

<stop offset="0%"style="stop-color:#000000;stop-opacity:0.1" />

<stop offset="15%" style="stop-color:#ffffff;stop-opacity:0.2"/>

<stop offset="85%"style="stop-color:#ffffff;stop-opacity:0.2" />

<stop offset="100%"style="stop-color:#000000;stop-opacity:0.1" />

</linearGradient>

<linearGradient id="red_black" x1="0%"y1="0%" x2="0%" y2="100%">

<stop offset="0%"style="stop-color:#ff0000;stop-opacity:1" />

<stop offset="100%"style="stop-color:#ee0000;stop-opacity:1" />

</linearGradient>

<!--圆盘顶部的椭圆-->

<ellipse cx="200" cy="82" rx="27"ry="6" style="fill:#ff0000;stroke:#ee0000;stroke-width:2;filter:url(#Gaussian_Blur)" />

<!--圆柱体渐变特效-->

<polygon id="polygon" points=""style="fill:#ff0000;stroke:#ee0000; stroke-width:2;filter:url(#Gaussian_Blur)"/>

<!--圆柱体-->

<polygon id="polygon2" points=""style="fill:url(#orange_red)" />

</svg>

</body>

</html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。