SVG——新一代Web设计及互动媒体的革新

利用Batik将SVG转化为位图(JPG、PNG、GIF等)

利用Batik将SVG转化为位图(JPG、PNG、GIF等)  本文通过实例讲述了如何通过Apache project提供的一种开放源代码的SVG渲染工具Batik,将易于描述、占用空间小的SVG矢量图转化为目前已被广泛使用的位图格式。 尽管目前浏览器对SVG还不支持,但利用SVG的部分优势,通过Batik将其光栅化为通用的位图格式的图像,使得在Web应用当中动态产生的某些必要的 统计矢量图被光栅化后反馈给网络用户浏览成为可能。

来源:SVG中国(ChinaSVG.COM)

  XML是由W3C制定的一种通用语言, 用于对WEB 上有格式数据进行描述,传输和操作。 作为一个数据表示的开放标准,XML 具有HTML所没有具大伸缩性和灵活性。XML 语言可以让信息提供者根据需要自行定义标记及属性名, 结构化的描述信息内容,使XML 文件的结够可以复杂到任何程度。 再加上良好的数据存储格式、可扩展性、高度结构化、便于网络传输等使用特点,使得XML 在应用中体现出以下一些优势:

  1. 利于开发灵活的WEB 应用软件;
  2. 轻松实现在WEB 上发布数据;
  3. 便于不同数据源的集成;
  4. 灵活实现数据显示的多样性;
  5. 强大的可伸缩性;
  6. 具有描述多种应用得到的数据的能力
  7. 支持本地计算和处理
  8. 实现更有意义的搜索。

  实际上,XML在使用中体现出来的优势还远不止这些,XML 的强大功能足以使它承担起新一网络发布语言的重任。 正因为如此,在计算机业内,不管是大型或小型的开发商,XML 都普遍得到认可,成为目前为数不多,只有一个标准的技术之一, 几乎所有的开发商都在努力实现并且遵循这种唯一的标准。 所以我们相信,XML 将成为未来网络发展的基石。

  然而,SVG作为一种可升级矢量图形, 是由W3C制定的描述二维图形的XML 应用程序。 它可以描述矩形,椭圆,三角形,阴影,螺旋形或梯形等,将每个形状描述为由一系列线和曲线组成的路径,从而弥补了GIF,JPEG等其它位图在对诸如流程图,设计图,技术图和其它类型制图的线条艺术的缺乏;另外,利用SVG可以从数据库信息生成图形(如图或图表)的能力,以及向图形添加动画和交互性的能力。 由于SVG是形式规范的XML文档,所以它也就具有XML 的各种优点,我们可以很方便的使用一些熟悉的常用工具(如XML 解析器、脚本、XSL样式表等)对SVG进行处理,从而使得更改起来很方便,而且其中的图形描述又可以被任何人重复的使用。

1 实现原理

  面对目前各行各业庞大的数据信息,对数据进行有效统计,动态生成各种统计图像, 用户可对生成的图像进行在线修改和编辑等操作,对于企业实时了解企业发展动态,掌握企业资源信息等方面都有着及其重要的意义。 虽然SVG有这么多的优点,可以动态生成矢量图,并可以用脚本来控制对其操作。 但是由于现在SVG还没有像Adobe Flash一样得到浏览器的支持,所以人们还很难将SVG图像直接集成在Web站点上。 为了解决缺乏浏览器的支持这一问题, 我们可以充分利用SVG的优点,设计一种可行的解决方法,即在图像呈现给网络用户之前,把SVG矢量图转化成被广泛浏览器都支持的光栅图(如GIF、JPEG等)格式。 对此,模型设计如下图所示:

***1

图1 模型图

由图1 中可以看出,实现此种转化的主要环节在于光栅化

  程序, 即把SVG矢量图光栅化为通用的位图格式的程序模块。所以,接下来就主要对其进行介绍,并对其运行环境、配置和使用方法做详细说明。

2 光栅化程序及其环境配置

  Batik是由Apache项目为我们提供的一种开放源代码的SVG渲染工具, 它可以用来浏览图、把SVG图转化为JPEG,GIF等位图以及其它相关功能。 为了配置运行环境,需下载以下程序包:

  1 JDK(Java开发包,可到http://www.sun.com下载;
  2 Batik(可到http://www.apache.org/dyn/closer.cgi/xml/batik下载程序包文件Batik-1.5.1.zip。解压后可以得到几个打包文件,如batik-squiggle.jar和batik-rasterizer.jar等。 注:在下载地址中还有batik-docs-1.5.1.zip和batik-src-1.5.1.zip,但我们只下载batik-1.5.1.zip即可, 这个版本的BATIK是针对那些只想了解BATIK特性,用BATIK做一些简单的实验的用户。 其它BATIK的具体用途详见http://xml.apache.org/batik/install.html#distributions。);

  另外,还需设置以下环境变量(其中,#表示JDK的安装路径;*表示batik所在路径)

  1 PATH环境设置:#\bin;  *\batik-rasterizer.jar;
  2 CLASSPATH环境设置:#\lib\dt.jar,#\lib\toos.jar。

3 光栅化的实现

  下面我们就谈谈如何使用BATIK工具来浏览SVG图以及将SVG图转化JPEG,GIF等通用的位图格式。 首先,我们先编写一个简单的SVG矢量图程序(lj.svg),并将其保存在#(注:以下#均表示SVG文件lj.svg所在目录)目录下。 核心程序如下:

<svg width="452" height="149" xmlns="http://www.w3.org/2000/svg">
 <rect x="0" y="25" width="450" height="120">
  fill="none" stroke="blue" stroke-width="2" />
 <text x="15" y="50">Products</text>
 <text x="15" y="75">Sales</text>
 <text x="15" y="100">Repairing</text>
 <text x="15" y="125">Supporting</text>
 <g fill="yellow" stroke="red" stroke-width="3">
  <rect x="150" y="40" height="15" width="273.993" />
  <rect x="150" y="65" height="15" width="99.932" />
  <rect x="150" y="90" height="15" width="3.228" />
  <rect x="150" y="115" height="15" width="25.242" />
 </g>

  在以上程序当中,绘制矩形时的width属性值均可根据数据库中数据来动态生成,以便图形化统计信息。 接下来介绍如何使用batik工具浏览以及如何光栅化SVG矢量图。

3.1  浏览SVG矢量图

  在解压所下载的Batik-1.5.1.zip可以得到一个batik-Squig-gle.jar文件。 直接运行它或在命令行中输入如下命令,即可打开SVG图像浏览器。(注:以下*均表示Batik所在目录) T注&以下b 均表示,=MDN 所在目录[

>java -jar *\batik-squiggle.jar

  接下来就可以在此图像浏览器中打开我们已保存好的SVG图文件(lj.svg),其显示效果如下:

***2
图2 lj.svg图

3.2 光栅化SVG矢量图

  在解压所下载的Batik-1.5.1.zip还可以得到一个batik-ras-terizer.jar文件。对以上程序lj.svg进行转化,就应在命令行中输入如下命令:

  >java -jar *\batik-rasterizer.jar [lj.svg 文件绝对路径]

  此命令默认转化为PNG格式,若要转化为JPEG图,则需要附带命令参数(其详细命令参数可参看http://xml.arpache.org/batik/svgrasterizer.html),命令如下:

  >java -jar batik-rasterizer.jar -m image/jpeg #\lj.svg

  一旦转换完成后,就会在相应的目录下找到lj.jpeg文件。然后就可以在浏览器中直接打开浏览了。如果想将SVG图转化为png,pdf,tiff格式的位图,只需将上面命令行参数jpeg改为png,pdf,tiff即可。

4 结束语

  SVG作为XML的一种词汇表,具有XML的许多优点,如良好的数据存储格式,可扩展性,高度结构化,便于网络传输等。但介于目前SVG还没有得到浏览器的支持,本文借助Btaik这个强有力的工具,使得SVG 图像可被光栅化为目前通用的位图图像,从而加深了对XML和SVG的相关知识的理解,且对目前SVG缺乏浏览器支持的状况提出了一种用户浏览SVG图像的可行的解决办法。

(未完)

 

将要更新