网络图形标准

来源:互联网 发布:淘宝怎么设置客服 编辑:程序博客网 时间:2024/06/05 03:10

http://www.raychase.net/558


前端绘图有几种方式,主流的网络图形标准有:

  • VML,IE支持;
  • SVG,FF、Safari和Opera支持;
  • Canvas,HTML5规范支持。

后端生成图形较为便捷,但是没法生成能够响应用户行为的动态图形(比如生成一个地图,用户点击地图上的某个城市,要显示城市信息,这通过后端图形生成很不容易做到),而且生成图形会吃掉服务端的性能。前端生成图形方面,有用Applet、ActiveX(这两个都不是什么好东西),Flash等等,但是现在,我们有纯文本的更好的选择。

下面会就这几种标准做一个介绍:

VML

Vector Markup Language(矢量标记语言)是一种XML语言,用于绘制矢量图形。1998年VML建议书由微软、Macromedia等向W3C提出审核。VML 遭到拒绝,因为Adobe、Sun等提出了PGML计划书。这两套标准后来合并成更具潜力的SVG。尽管VML规格一度遭到W3C的拒绝,并为大多数使用者所遗弃,但微软依然将VML的标准规格实现到Internet Explorer 5及之后的版本。

这里可以找到许多VML的例子。

以这段代码为例,在IE浏览器下将展示一个蓝色实心的椭圆 :

1
2
3
4
5
6
<htmlxmlns:v>
    <style>v\:*{behavior:url(#default#VML);position:absolute}</style>
    <body>
        <v:ovalstyle="left:0;top:0;width:100;height:50"fillcolor="blue"stroked="f"/>
    </body>
</html>

上面 xmlns:v 指的是VML的命名空间,你当然可以写全成:xmlns:v=”urn:schemas-microsoft-com:vml”;style标签内的的v\:* 是一个css样式,表示所有以”v:”开头的标签的dom元素都继承了这个样式;v:oval则绘制了一个椭圆形。

VML支持动态脚本的调用,即可以在VML中嵌套JavaScript。其实这也没有什么奇怪的,本身是DOM对象,和JavaScript的关联与HTML并无二致。

SVG

可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG由W3C制定,是一个开放标准。在W3C自己看来,SVG的竞争对手应该主要是Flash,它的标准被开源,并且支持浏览器传统的DOM。

SVG格式和前面提到的VML一样,支持脚本,容易被搜索引擎索引。SVG可以嵌入外部对象,比如文字、PNG、JPG,也可以嵌入外部的SVG。它在移动设备上存在两个子版本,分别叫做SVG Basic和SVG Tiny。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
<?xmlversion="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svgxmlns="http://www.w3.org/2000/svg"version="1.1"
    width="467"height="462">
  <!-- This is the red square: -->
  <rectx="80"y="60"width="250"height="250"rx="20"fill="red"
         stroke="black"stroke-width="2px"/>
  <!-- This is the blue square: -->
  <rectx="140"y="120"width="250"height="250"rx="40"fill="blue"
         stroke="black"stroke-width="2px"fill-opacity="0.7"/>
</svg>

上面的例子,将展示红蓝圆角矩形嵌套的图形,可以看到蓝色矩形的fill-opacity属性带来的透明效果:

网络图形标准

事实上,即便作为W3C标准,不同浏览器对其支持力度还是大不相同,Opera支持比较好,对SVG特性支持得最多。IE9以下的版本如果要支持SVG,需要安装Adobe公司的一个名为Adobe SVG Viewer的插件,不过效果一定不如浏览器原生支持出色(只有IE原生不支持SVG,浏览器中IE永远是那么另类,直到IE9才算部分支持)。

矢量图形格式和JPEG等格式相比,易于读懂、无损放大以外,可以利用gzip压缩算法进行文本压缩从而获得很大的压缩比,所以大小通常要比JPEG等小很多(SVGZ)。

Canvas

Canvas标签是HTML的标签之一,允许脚本动态渲染图像。开始由苹果推出,Safari率先支持,IE上对Canvas的支持可以通过诸多JavaScript库实现。HTML5大势所趋,IE9也支持了Canvas。Canvas和SVG有相当程度互补之处,相比而言VML应该是将被淘汰的标准。

1
2
3
4
5
6
7
8
9
10
11
<html>
    <body>
        <canvasid="myCanvas"></canvas>
        <scripttype="text/javascript">
            var canvas=document.getElementById('myCanvas');
            var ctx=canvas.getContext('2d');
            ctx.fillStyle='#FF0000';
            ctx.fillRect(0,0,80,100);
         </script>
    </body>
</html>

很明显,这会输出一个红色矩形。

Canvas存在一个基于JavaScript的绘图API,这是和SVG、VML的不同之处,但是基于JavaScript就意味着通常对于DOM的操作不像SVG、VML那么容易,每次对图像的修改可以移除一个DOM对象即可,而是要完全重画图形。

另外一个,Canvas具备3D图形的特性(其实VML和SVG在开源包支持下也可以具备这样的特性),虽然现在支持3D特性的浏览器还很少,支持能力还很薄弱,但是未来相信能看到App和网页的大统一。

网络图形标准

值得一提的是,当前SVG和VML在浏览器支持度的不同,使得诸多前端矢量图形库针对IE和非IE做了两套实现,保证在IE下用VML渲染,而其他浏览器中则用VML渲染,而对于Canvas的支持目前还相对较少。但是由于HTML5 API带来的互补特性,我们会看到越来越多的矢量图形库借由其对页面图形渲染的支持,比如它。

最后,是不是不使用这样的网络图形标准就不能再网页上绘图了?当然不是!通过纯粹的HTML+CSS一样可以做到。而HTML 5+CSS 3绘图的例子就更多了。


0 0
原创粉丝点击