Prof. Dr.-Ing. Oliver Radfelder
Informatik / Wirtschaftsinformatik
Hochschule Bremerhaven
svg

SVG steht für 'Scalable Vector Graphics'.

SVG ähnelt in der Struktur HTML - hat also öffnende und schließende Tags und mit Attributen werden die konkreten Eigenschaften wie Position, Füllfarbe oder Strichfarbe beschrieben. Mit dem svg-Tag lassen sich Grafiken direkt in HTML einbetten:

<!doctype html>
<html>
  <body>
   <svg width='800' height='150'>
     <circle cx='30' cy='30' r='10' stroke='blue' fill='yellow' />
     <rect x='90' y='30' width='200' height='100' fill='gray' stroke='red' />
     <text x='99' y='50'>Bremerhaven!</text>
     <line x1='1' y1='100' x2='200' y2='120' 
           stroke='red' stroke-width='3' />
   </svg>
  </body>
</html>
Bremerhaven!

In einer anderen Variante lassen sich svg-Dateien ähnlich wie png-Dateien in einem IMG-Tag verlinken. Dann muss allerdings der Namespace (xmlns) als Attribut mit angegeben werden. Schreiben Sie die folgende SVG-Beschreibung in die Datei standalone.svg:

<?xml version="1.0" encoding="utf-8"?>
<svg width='800' height='300' xmlns='http://www.w3.org/2000/svg'>
   <circle cx='30' cy='30' r='10' stroke='blue' fill='yellow' />
   <rect x='90' y='30' width='150' height='100' fill='gray' stroke='red' />
   <text x='99' y='50'>Bremerhaven!</text>
   <line x1='1' y1='100' x2='200' y2='100' 
         stroke='red' stroke-width='3' />
   </svg>

Binden Sie dann die Datei als Referenz in ein HTML-Dokument ein:

<!doctype html>
<html>
  <body>
    <img src='standalone.svg'>
  </body>
</html>
Automatisierung

Auch hier gilt wieder: wer eine Skriptsprache wie die Bash als Alltagswerkzeug beherrscht, kann sich leicht eine kleine Visualisierung zusammenstellen. Erstellen Sie doch beispielsweise einmal ein Raster von kleinen Kreisen ...

#!/bin/bash
# Skript mkkreise.sh
echo "
<?xml version='1.0' encoding='utf-8'?>
<svg width='800' height='300'
      xmlns='http://www.w3.org/2000/svg'>"
for x in $(seq 10 10 800); do
  for y in $(seq 10 10 300); do
    echo "<circle cx='$x' cy='$y' r='3' fill='blue' />"
  done
done 
echo "</svg>"
    

... und lenken Sie das Ergebnis in eine svg-Datei um:


 ./mkkreise.sh > kreise.svg
    

Sie können dann in einer HTML-Datei wieder auf die nun generierte svg-Datei verweisen. Zudem können Sie regelmäßig - zum Beispiel mit einem cron-Job - Reports erstellen und in das Webverzeichnis kopieren; ganz ohne regelmäßig ein GUI aufmachen zu müssen.

Da wir bei uns das Open-Source Werkzeug Inkscape auf dem Server hopper sowie in den Dockern installiert haben, lässt es sich auch in einer Automatisierungskette einsetzen, um ein png oder ein pdf zu erzeugen:


  inkscape --export-filename=kreise.png -w 800 kreise.svg
    

Der Schalter --export-filename weist Inkscape an, in das angegebene Format zu exportieren.


  inkscape  --export-pdf=kreise.pdf kreise.svg
  pdfcrop kreise.pdf
    

In Inkscape lassen sich zudem einzelne Aktionen als Kommandos übergeben.

$ inkscape --action-list
action-list         :  Print a list of actions and exit
[...]
$ cat actions.txt
file-open:logo-l.svg
export-type:png
export-width:1600
export-filename:logo-1600.png
export-do
export-type:png
export-width:800
export-filename:logo-800.png
export-do
export-type:svg
export-plain-svg
export-filename:logo-plain.svg
export-do
query-all
quit
$ inkscape --shell < actions.txt 
    

Das Programm rsvg-convert konvertiert ähnlich wie convert und inkscape in png, pdf und wieder in svg:

$ rsvg-convert --width=2400 --keep-aspect-ratio -f svg image.svg > scaled.svg

Das Programm pdfcrop wird zuweilen benötigt, um ein PDF zu erzeugen, das eingebettet werden kann - z.B. in LaTeX...

Solche kleinen Werkzeuge gibt es viele: pdftocairo (konvertiert pdf-Dateien in png-Dateien), pdfbook (erstellt ein Booklet), pdfseperate (zerlegt eine pdf-Datei in einzelne Seiten), convert (konvertiert Bildformate), ...

Weiterführendes
mediaevent tutorial
mozilla developer network
SVG Explained in 100 Seconds
Cassie Evans – Unlocking SVG’s Superpowers – SOTR