Scalable Vector Graphics
Scalable Vector Graphics (
SVG) is an
XML markup language for describing two-dimensional
vector graphics, both static and
animated, and either declarative or scripted. It is an
open standard created by the
World Wide Web Consortium.
|
Static image generated from an SVG example. The original file requires a browser with either native or plugin SVG support |
SVG allows three types of graphic objects:
* Vector graphic
shapes (e.g. paths consisting of straight
lines and
curves, and areas bounded by them)
*
Raster graphics images /
digital images
* Text
Graphical objects can be grouped, styled, transformed and composited into previously
rendered objects. Text can be in any XML
namespace suitable to the application, which enhances searchability and
accessibility of the SVG graphics. The feature set includes nested
transformations,
clipping paths,
alpha masks,
filter effects,
template objects and
extensibility.
SVG drawings can be dynamic and interactive. The
Document Object Model (DOM) for SVG, which includes the full XML DOM, allows straightforward and efficient vector graphics animation via
ECMAScript or
SMIL. A rich set of
event handlers such as
onmouseover and
onclick can be assigned to any SVG graphical object. Because of its compatibility and leveraging of other Web standards, features like
scripting can be done on SVG elements and other XML elements from different
namespaces simultaneously within the same web page. An extreme example of this is a complete
tetris game implemented as an SVG object, found
here. (The link requires an SVG enabled browser.)
|
Larger image generated from the same SVG file showing how SVG files can be scaled. |
If storage space is an issue, SVG images can be saved with
gzip compression, in which case they may be called "SVGZ files". Because XML contains verbose text, it tends to
compress very well and these files can be much smaller. Often however the original vector-file (SVG) is already smaller than the rasterised version.
Impact on the Web
The widespread adoption of SVG clients, particularly those natively embedded in
web browsers (as it is in
Firefox and
Opera), may bring a significant new look-and-feel to the
World Wide Web. A current trend is to build dynamic
web sites that behave somewhat like desktop applications, utilizing the
Ajax technique. SVG enhances the capabilities of Ajax, by providing a rich, graphical set of page elements, well beyond those specified by
HTML/
CSS. The
SVG Terminal module for Firefox is an early example of this.
SVG was developed by the
W3C SVG Working Group starting in 1998, after
Macromedia and
Microsoft introduced
Vector Markup Language (VML) whereas
Adobe Systems and
Sun Microsystems submitted a competing format known as
PGML. The
working group was chaired by
Chris Lilley of the W3C.
*
SVG 1.0 became a
W3C Recommendation on
2001-09-04.
*
SVG 1.1 became a W3C Recommendation on
2003-01-14. The SVG 1.1 specification is modularized in order to allow subsets to be defined as profiles. Apart from this, there is very little difference between SVG 1.1 and SVG 1.0.
* SVG Tiny and SVG Basic (the Mobile SVG Profiles) became W3C Recommendations on
2003-01-14. These are described as profiles of SVG 1.1.
* SVG Tiny 1.2 and SVG Full 1.2 are both currently
W3C Working Drafts. SVG Tiny 1.2 was initially released as a profile, and later refactored to be a complete specification, including all needed parts of SVG 1.1 and SVG 1.2. On
2006-07-21 a new draft of the SVG Tiny 1.2 specification was released. A similarly refactored draft for SVG 1.2 Full has not yet been released.
Mobile profiles
Because of industry demand, two mobile profiles were introduced with SVG 1.1:
SVG Tiny (SVGT) and
SVG Basic (SVGB). These are subsets of the full SVG standard, mainly intended for
user agents with limited capabilities. In particular, SVG Tiny was defined for highly restricted mobile devices such as
cellphones, and SVG Basic was defined for higher level mobile devices, such as
PDAs.
Neither mobile profile includes support for the full DOM, while only SVG Basic has optional support for scripting, but because they are fully compatible subsets of the full standard most SVG graphics can still be rendered by devices which only support the mobile profiles.
The use of SVG on the web is in its infancy. There is a great deal of inertia due to the long-time use of pure raster formats and other formats like
Macromedia Flash or
Java applets, but also browser support is still uneven, with native support in Opera and Firefox, but Safari and Internet Explorer requiring a plugin. Web sites which serve SVG images typically also provide the images in a raster format, either automatically by
HTTP content negotiation or allowing the user to directly choose the file.
Native support
There are several advantages to native support, among which are no need for the installation of a plugin, the ability to freely mix SVG with other formats in a single document, and rendering scripting between different document formats considerably more reliable. At this time all major browsers have committed to some level of SVG support except for Internet Explorer. See
Comparison of layout engines for further details.
*The
Opera web browser (since 8.0) has support for the SVG 1.1 Tiny specification while Opera 9 includes SVG 1.1 Basic support and some of SVG 1.1 Full.
*Browsers based on the
Gecko layout engine version 1.8 (such as
Firefox 1.5,
Camino 1.0 and
SeaMonkey Internet suite 1.0), all have incomplete support for the SVG 1.1 Full specification. The Mozilla site has
an overview of the modules which are supported in Firefox 1.5 and
an overview of the modules which are in progress in the development version of Firefox.
*
Apple's Safari browser, has also recently begun to port KSVG2 into
WebCore, initiating work on incorporating native support of SVG into Safari.
Nightly builds of Safari now include SVG support.
*
KDE's
Konqueror has a fairly complete SVG plugin called
KSVG. KSVG2 is slated to be rolled into KDE 4 core which could make it native rendering for Konqueror some time in the future. Elsewhere in KDE the format is finding greater use, and from version 3.4 onwards SVG
wallpapers are supported.
*
Amaya web browser has partial SVG support.
Plugin support
In browsers such as
Internet Explorer and
Safari, a
plugin is needed to view SVG content. The most widely available SVG plugin on the desktop is from
Adobe Systems and supports most of SVG 1.0/1.1. The current version of Safari ships with the plugin, while Internet Explorer users must separately download it. A legacy plugin was once offered from
Corel.
Images are usually automatically rasterised using a library such as
ImageMagick, which provides a quick but incomplete implementation of SVG, or
Batik, which implements all SVG except declarative animation but requires the
Java Runtime Environment.
*
Inkscape is a free (open source) SVG drawing program for Linux, Windows, and Macintosh.
*The
Batik SVG Toolkit can be used by Java programs to render, generate, and manipulate SVG graphics
*[https://svgsalamander.dev.java.net/ SVG Salamander] is an open alternative to Batik for Java
*The
GNOME project has had integrated SVG support throughout the desktop since
2000.
*
Adobe Illustrator, the de facto industry standard for graphic design also supports both the import and export of SVG images.
Some viewers are listed in external links.
On mobile, the most popular implementations for mobile phones are by
Ikivo and
Bitflash, while for PDAs, Bitflash and
Intesis have implementations.
Flash Lite by
Macromedia optionally supports SVG Tiny since version 1.1. At the SVGOpen 2005 conference,
Sun demonstrated a mobile implementation of SVG Tiny 1.1 for the CDLC platform. Mobile svg players from Ikivo and BitFlash come pre-installed i.e. manufacturer burn the SVG player code in their mobiles before shipping to the customers.
Level of SVG Tiny support varies from mobile to mobile depending on the manufacturer and version of the svg player installed. Many of the new mobiles support additional features beyond SVG Tiny 1.1, like gradient and opacity.
Some
wikis have experimented with SVG support; it has been speculated that since SVG is a text-based format, a wiki might allow edits to SVG images in a fashion similar to editing a standard article. However, the benefits of editing images in this way are disputed. It is generally considered that even trivial editing is better achieved using a separate graphics package because it is difficult to visualise exactly how changes to the XML will appear on the final image. Current
wikis mostly do not support either the display or editing of SVG images, partly because of the lack of full browser support, but also because
rasterization using Batik is CPU-intensive and requires
Sun's
Java Runtime Environment, which is not
free software. In the spirit of being open, many wikis refuse to use non-free software. SVG support would be valuable to a wiki, especially for articles that require diagrams, so the situation may change in the future, when ImageMagick is expanded to cover more of the SVG standard, and work on allowing Batik to run on a completely free Java implementation is complete [
1]. The
MediaWiki software used to run
Wikipedia currently supports the SVG format.
*
SVG Tools Editors, converters and other tools for SVG.
*
sXBL SVG's XML binding language
*
SMIL Synchronized Multimedia Integration Language
*
Rich Internet application*
Semantic Web*
2D computer graphics*
3D computer graphics*
Raster to vector*
List of vector graphics markup languages*
Comparison of layout engines (graphics)*
Open Clip Art LibraryNews and Reference
*
W3C SVG page Specifications, list of implementations.
*
SVG Community News, wiki.
*
SVG Implementations Directory*
Mozilla SVG project*
Using SVG*
SVGX SVG Development, Works and Resources
*
Learn SVG, the book
Viewers
*
Adobe SVG Viewer*
Corel SVG Viewer.
Demos
*
Croczilla SVG Demos*
Can you put the moon into orbit? (simulation).
*
SVG mapping examples, tutorials and shp2svg converter
*
Sample SVG files Created from popular programs
*
Adobe SVG Demos (These examples are for Adobe's SVG variant, and require Adobe's plugin.)
*
Rendering results - images of rendering result from various open source SVG backends
Libraries
*
Batik SVG Toolkit - Java SVG player and renderer (Apache licence)
*[https://svgsalamander.dev.java.net/ SVG Salamander] - another Java SVG player and renderer (LGPL)
*
librsvg - SVG renderer for GNOME.
*
SVG Perl module*
Trolltech's QtSvg module*
SVG Rendering engine Comparison pages - comparisons of several FOSS SVG libraries, with screenshots
*
Openwave phone simulator.
*
JUCE - cross-platform UI library which includes an SVG importer.
Tutorials
*
Introduction to Presenting Scientific and Medical Data on the Web using SVG.
*
Pike's SVG Tutorial*
SVGBasics*
SVG Authoring Guidelines*
SVG Tutorial from W3Schools
*
Learn SVG TutorialsArticles
*
SVG: A Sure Bet *
SVG Is The Future *
Descriptions from Webreference*
The future of SVG *
SVG and its Path into the Linux DesktopEditors and converters
see
SVG ToolsWikipedia
*
SVG support on
Meta*
SVG images on Wikipedia