Create JPEGs Automatically With SVG
By Benoit Marchal2003-12-22
A Pragmatic Application
Even though it is not as readily available as Flash, using SVG today still has its advantages. One of the attractions of SVG is that it is an XML vocabulary, so it is easy to tweak SVG files with familiar tools such as XML parsers, scripts, and XSL stylesheets. To work around the lack of browser support, it is possible to convert SVG images into formats that are widely supported, such as GIFs or JPEGs.
Apache offers an open-source SVG renderer, Batik (see Resources). Batik comes in different forms and shapes, including a browser to view images, tools to create images, and a rasterizer. I'm most interested in the rasterizer, since it can convert SVG files to bitmaps.
Enough talk -- it's time to code. Listing 1 is a Python script that creates a bar chart from a set of data. Note that you don't have to use Python for this tip to work -- Perl, JavaScript, the Java language, and, most importantly, XSL stylesheets work equally well. The point is that since SVG files are XML, any XML tool is appropriate.
Listing 1. printsvg.py
|
In Listing 1, I kept the bar chart simple. First the script draws the axis, then it loops over the data and draws the bars as rectangles. It also draws labels as text. It would not be difficult to improve on the graphics, like drawing the bars in 3D or using different colors. If you'd like to learn more about writing SVG shapes, check the developerWorks tutorials (see Resources).
The script is a filter, so it expects its input from the standard input and it writes the results on the standard output. It expects the data to be presented in lines where each line holds two pieces of data -- the line label and a percentage. Use the redirection operators to work with files, as in:
|
Listing 2 is a sample data set. Obviously, you can generate dozens of images in seconds by feeding different data sets to the script. This can be useful in statistical applications.
Listing 2. data.txt
|
To convert the SVG image to a more common format, install the Batik rasterizer (see Resources) and issue the following command:
|
Running the script in Listing 1 with the data from Listing 2 will ultimately produce the image in Figure 1:
Figure 1. The bar chart example
By default, the rasterizer creates PNG files. If you'd rather create JPEGs, use the following command:
|
The -m specifies the image MIME type and the -q is the quality factor for the JPEG (a number between 0 and 1).
Tutorial Pages:
» Use Scalable Vector Graphics To Create Images By The Dozen
» A Pragmatic Application
» Variations On The Theme
» Resources
First published by IBM developerWorks
