来源:(正在更新,待查证,最初发表在2002年)

  在过去十年中,图像图形技术曾经使出版印刷行业发生了一场深刻的技术革命,使古老的印刷术融入了高速发展的信息产业。随着Internet技术的普及和发展,图像图形技术作为Web浏览技术的基础,更将为建立一个全新的互联网行业,发挥至关重要的作用。然而,目前的Internet技术在图形图像方面,应该说还处在年轻阶段,从浏览器的核心技术来看,其对于图形图像的支持还仅仅局限于对图像的简单显示,随着应用的逐渐深入,图像技术自身的一些缺点,如文件较大、在不同设备上显示效果不同等问题日益突出,从某种程度上讲也限制了Web浏览技术的进一步发展。

  为此,众多业内人士针对Web浏览器图像图形功能支持较弱这一缺点提出了改进措施。近年来,各大软件厂商和组织纷纷推出自己的矢量图形规范,主要代表有Adobe Systems Inc.制定的PGML(Precision Graphics Markup Language)、CCLRC提出的Web Schematics、Autodesk, Inc和微软等提出的VML(Vector Markup Language)。此外,一些公司开始制作自己的plug-in来支持矢量图形的浏览,但这些插件都由于缺乏跨平台的支持,以及没有较好的配套编辑工具,而未能得到网上的广泛应用。正是在这种情况下,为统一标准,结束目前的混乱局面,W3C组织于1998年8月专门成立了SVG工作组致力于图形标准的制定工作,并于1999年2月11日发布了第一个讨论草案,后几经修订于最近发布了最终草案。

  SVG是一种基于XML 的用来描述二维矢量图形和矢量/点阵混合图形的置标语言,其全称是可扩展矢量图形规范(Scalable Vector Graphics)。其中,"可扩展"(scalable)在图形图像技术上指的是它不局限于一个固定的分辨率和大小,譬如可以在不同分辨率的屏幕上以相同的大小显示,也可以在同一个网页中以不同的大小或观全局或观细节;而在网络技术上指的是这一规范能够与其它规范相融合,从而满足更广泛的用户需求,适合于更广泛的应用方式。"矢量"(vector)是指规范中描述了直线、曲线、形状等几何图形,而无须象PNG、JPEG等图像格式那样逐象素进行描述,这使得集成了SVG的XML文档更小,下载速度也大大提高。"图形"(graphics)是指它提供了对矢量和矢量/栅格混合图形的描述,填补了大多数基于XML的置标语言规范对复杂图形描述的空白。

  SVG规范定义了SVG的特征、语法和显示效果,包括模块化的XML命名空间(namespace)和SVG文档对象模型(DOM)。在以前的草案中,仅为SVG定义了一个DTD,这个DTD支持样式单的引用。但这样一来,SVG就不再是一个自定义的全包容的语言规范,而需要浏览工具额外具有对样式单文件的处理能力。出于这种考虑,在新近出台的SVG的第八个草案中,为SVG提供了两种不同的形式,即样式化SVG和交换型SVG,它们各自有不同的DTD及MIME类型。样式化SVG允许对图形对象进行样式添加,它可以通过引用外部样式文件、在文件头中预先进行样式声明和通过属性为元素定义样式三种方式使用样式单,是SVG用于网络环境的推荐存储格式。而交换型SVG取消了对样式单的支持,完全使用元素属性描述各个图形对象的显示效果。在未来的网络传输中,交换型SVG将会充当现在印刷业广泛使用的图形格式--EPS格式的网络版。并且,由于所有显示信息都封装到XML的属性中,交换型SVG还可以作为XSLT转换后所得到的结果文件格式,广泛应用于XML文档显示效果的描述中。

  SVG的绘图可以通过动态和交互式方式进行,在实际操作中,则是以嵌入方式或脚本方式来实现的。SVG不仅使用Xlink和Xpointer来提供超链接功能,还定义了丰富的事件,这些事件可以应用于所有的图形对象。由于SVG支持脚本语言(script),高级网页制作者仅须进行简单的Script编程,访问SVG DOM的元素和属性,即可响应特定的事件,从而提高了SVG的动态和交互性能。这使得SVG无论在显示效果还是动态交互上都不逊于当前在互联网上独领风骚的FLASH。而且,SVG除了单独使用外,还可以在XML文件中作为命名空间引入,或者用作HTML文件中的特殊对象。同样,SVG作为一种基于XML的语言规范,也具有XML的可扩展性,可以在SVG文件中引入其它置标语言的命名空间。这些特性使得SVG在互联网上将畅通无阻,比起采用二进制文件格式不能与其它网页语言兼容的FLASH更胜一筹。

  SVG是图形、图像和文字的有机统一。根据功能不同,SVG的主要对象可以归为基本要素对象和页面描述功能对象两大类,请看下图。

  由上图可以看出,SVG除了支持HTML中常用的标记,如文本、图像、链接、交互性、CSS的使用、脚本(Script)外,还提供了大量针对图形、图像、动画的特定标记。下面我们就来对它们进行分别介绍。

  • 一、SVG中对矢量图形的支持

  众所周知,矢量图形用点和线来描述,可以大大减小文件长度,提高传输效率。更重要的是,它将对图形效果的显示由服务器端移到客户端,可以充分利用客户端的资源,减轻服务器端的负担。

  SVG中有专门用于矢量图形描述的标记,包括矩形<rect>、圆<circle>、椭圆<ellipse>、直线<line>、折线<polyline>和多边形<polygon>。此外,SVG还支持图形绘制中常用的由Bezier曲线定义的路径描述和操作,其元素标记为<path>。有了以上定义,就可对相应路径进行勾勒、填充、裁剪、蒙版和合成等一系列操作。

  对于<path>、<text>元素和前述形状元素,可以利用Stroke 和Fill属性进行勾勒和填充,其中填充可以使用某种颜色,或使用<linearGradient>、<radialGradient>定义的渐变色,或是使用<pattern>定义的底纹填充模式。而对于<path>、<line>、<polyline>、<polygon>等元素,只要将其放入<marker>标记对中,即可按所定义的路径绘制箭头。

  同样,对于<path>、<text>元素和各种形状元素,也可以对其轮廓内的区域作裁剪、蒙版和合成操作。<clipPath>利用上述各种元素描述裁剪路径,<mask>标记则支持单通道、三通道、和alpha通道操作。最后,SVG还支持图形中成组的概念,以上操作均可以对一组图形进行操作。

  在下面的例子中,借助于上面讲到的一些标记绘制了一个经过渐变填充的矩形图形。

  它的显示效果是:

  如果你的IE已经安装了ADOBE的SVG Viewer插件(下载地址),将上面一段代码存为扩展名为.svg的文件,再用IE打开,就可以看到上面的效果。

  • 二、SVG中对图像过滤操作的支持

  目前网上传输的图像文件主要采用GIF、JPEG和PNG三种文件格式。尽管它们具有高压缩比、低容量的优点,但即便要将其做一点微小改动,也必须利用图像软件将其重新制作重新存储,非常繁琐。SVG支持对于图像的一系列常用过滤器操作,使得图像效果调整的任务可以在客户端进行。同样,这些过滤器操作也可应用于图形之中。

  使用标记<filter>可以定义过滤器效果,在其中按照要施加的过滤操作的顺序依次罗列相应的标记。现在我们来看一个W3C在SVG标准中给出的例子:

  其浏览效果是:

  这个SVG描述的基本图形是蓝框灰色矩形,里面有一个红色环行跑道,再里面是一个红色圆头矩形,中间有"XML"的白色文字。那么,它是如何通过一系列的过滤操作得到上面的效果呢?我们就来一步步看一看。

三、SVG中对动画的支持

  目前,网页中播放的动画多为GIF格式,它也存在着与网上传输的图像格式相同的问题,即修改在服务器端实现,而不是在客户端实现。SVG中提供了专门的动画效果,可以描述一个图形图像元素的实时变化。

  SVG中用标记<animateMotion>描述元素的移动效果,用<animateFlipbook>描述元素的弹跳效果,用<animateTransform>描述元素的放缩、旋转、偏斜等变换效果,用<animateColor>描述元素颜色的改变,还可以用<animate>描述元素的淡入淡出效果。

  下面这个例子描述了几种不同的动画效果:

  代码首先描述了一个黄色矩形的淡出效果,分别指示了在9秒钟的过程中它的左上角坐标和长、宽的匀速变化。然后又描述了从第3秒开始显示的一串文字,这串文字在接下来的6秒钟里有以下动作:

  · 文字的左上角沿直线运动
  · 文字的颜色由兰色变成深红
  · 文字的方向从上斜30度变为水平
  · 文字的逐渐增大到原先的3倍大小

  它在0秒、3秒、6秒、9秒的显示效果分别是:

  尽管SVG规范尚未成为正式的推荐标准,但由于目前SVG代表了未来网上矢量图形传输发展的方向,国外各大公司都在追踪其发展,开发设计了一些实验系统,Adobe公司开发了用于IE5和Netscape的SVG浏览插件,IBM推出了专门的SVG浏览工具,许多知名的平面设计软件,例如CorelDraw、Illustrator,都开始尝试支持SVG格式的输入和输出,同时还出现了一大批格式转换工具,其中还包括从现在流行的Flash格式向SVG格式的转换工具。国内对于SVG的应用研究也已经逐步展开,例如图像图形编辑软件"方正画苑"已经在其3.0版本中加入了SVG的编辑输出功能,预计不久就将投入市场。鉴于SVG出色的优点,我们有理由相信,在不久的将来基于SVG技术的浏览技术必将成为Web技术上一个新的热点。

(THE END)

面向图形可扩展矢量图形规范:SVG相关推荐

  1. Web图形开发方案选型,SVG/VML/Flash/Applet优劣比较

    Web图形开发方案选型,SVG/VML/Flash/Applet优劣比较 在Web 项目开发过程中,我们常常会使用到各类图形,如流程图,饼图,甘特图,散列图,趋势图等等.目前有很多种方法在网页上绘制图 ...

  2. svg 缩放_研究:可缩放矢量图形(SVG)

    矢量图形已广泛应用于印刷媒体中 . 在网站中,我们还可以使用SVG或可缩放矢量图形添加矢量图形. 根据W3.org的官方规范 ,SVG被描述为: 一种用于描述XML中的二维图形的语言. SVG支持三种 ...

  3. 绘制可伸缩矢量图形(SVG)

    1.SVG概述 可伸缩矢量图形(Scalable Vector Graphics,SVG)使用XML格式在Web上定义基于矢量的图形.矢量图形是根据几何特性来绘制的图形,矢量(Vector)可以是一个 ...

  4. Asp.net 面向接口可扩展框架之类型转化基础服务

    新框架正在逐步完善,可喜可贺的是基础服务部分初具模样了,给大家分享一下 由于基础服务涉及面太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 ...

  5. Asp.net 面向接口可扩展框架之核心容器

    新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫"核心容器". 容器为什么那么重要呢?这个有必要好好说道说道. 1.首先我们从框架名称面向接口编程说起,什么是面向 ...

  6. jmeter监听器之图形监控扩展

    一.插件下载 1.JmeterPlugins-Standard 插件:https://jmeter-plugins.org/downloads/old/ 路径中下载1.4.0版本. 2.ServerA ...

  7. Jmeter 图形监视器扩展插件下载及使用

    1. 为什么要下载图形监视器扩展插件? 1.1 需求 请求(查询学院-所有)接口1000次的时候如何在客户端Jmeter工具中查看服务器(CPU.内存.网络.磁盘)的使用信息 1.2 问题 1. Jm ...

  8. C#面向集合的扩展(讨论)

    问题引出 C#是一种面向过程的算法设计语言,在处理数学计算时显得力不从心.面向集合是一种比较高阶的特性,允许程序直接对集合进行直接处理,而不用显示进行循环调用,不需要指定路径,因此可以大幅提高开发效率 ...

  9. 图形图像文件扩展名一览(转)

    图形图像文件大致上可以分为两大类:一类为位图文件:另一类为矢量类文件.前者以点阵形式描述图形图像,后者是以数学方法描述的一种由几何元素组成的图形图像.位图文件在有足够的文件量的前提下,能真实细腻地反映 ...

  10. 图片和图形之扩展色彩内容增强图形(20)

    原文 概要 除了标准RGB(sRGB)之外,Android 8.0(API级别26)还引入了对额外色彩空间的色彩管理支持,以 在具有兼容显示的设备上呈现图形.有了这种支持,您的应用程序可以通过Java ...

最新文章

  1. 亲测吃知乎月饼变身“喷射战士”,我给大家科普一下发生甚么事了
  2. ateq测漏仪f620说明书_上海壁挂式测漏仪安全使用说明,煤气房报警器安装安全使用说明...
  3. [答疑]-ATF中异常向量表为何没有实现“Current Exception level with SP_ELx, x>0.“
  4. Acronis True Image无法卸载或者卸载导致无法开机解决办法
  5. 设置tomcat自动启动的相关脚本
  6. Oracle之不可见索引
  7. 深入理解C# 静态类与非静态类、静态成员的区别 [转载]
  8. 《Python Cookbook 3rd》笔记(5.19):创建临时文件和文件夹
  9. C#中常用的几个委托
  10. Swift语法专题五——集合类型
  11. 小众却顽强的编程语言 Erlang ,你了解多少?
  12. [bzoj 4774]修路
  13. 一起谈.NET技术,NHibernate 3.0.0.Alpha1 发布及新特性介绍
  14. Android现学现用第十二天
  15. 并查集的介绍和其六种优化(c++)
  16. 畅谈无线通信系统物理层之系统概述
  17. 计算机cad实训日记,cad制图实习日记范文
  18. Win10上安装ue4后无法运行问题的解决方法
  19. Vue3路由,VueX3,Vue3生命周期函数
  20. 系统集成项目管理工程师有什么用?你真的了解吗

热门文章

  1. PLC基本指令系统优势
  2. 机器视觉可以应用到哪些领域,你都知道吗?
  3. 微信小程序制作表格代码
  4. javascript编写的抽奖小程序
  5. 如何将qrc文件添加至VS
  6. 我在谷歌大脑工作的 18 个月中,是怎样研究强化学习的?
  7. 【喵迹 Pro】GPS轨迹记录安卓APP使用说明
  8. 姜成转载:站群的操作方法
  9. 数学建模案例【人口模型 】(马尔萨斯人口模型,Logistic模型)
  10. 《代码大全》个人总结