SVG: Unterschied zwischen den Versionen

Aus KGS-Wiki
Zeile 20: Zeile 20:
Jede Anweisung gibt für ein grafisches Objekt vor, wie es zu zeichnen ist. Dabei gibt es Anweisungen für Standardformen wie Kreise und Rechtecke und die sehr mächtige Form <code>path</code>, die quasi jede vorstellbare Gestalt annehmen kann.
Jede Anweisung gibt für ein grafisches Objekt vor, wie es zu zeichnen ist. Dabei gibt es Anweisungen für Standardformen wie Kreise und Rechtecke und die sehr mächtige Form <code>path</code>, die quasi jede vorstellbare Gestalt annehmen kann.


Für alle ''kursiv'' gesetzten Platzhalter müssen bei der Umsetzung konkrete Werte eingegeben werden.
{{Hinweisbaustein|INHALT=Für alle ''kursiv'' gesetzten Platzhalter müssen bei der Umsetzung konkrete Werte eingegeben werden!|ICON=[[File:Achtung.svg|32px]]}}
 
*'''Gerade Linien''' fügt man mit der Anweisung <code><line x1="</code>''a'' <code>y1="</code>''b''<code>" x2="</code>''c''<code>" y2="</code>''d''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. Diese Linie verbindet dann die Punkte (''a''|''b'') und (''c''|d).
*'''Gerade Linien''' fügt man mit der Anweisung <code><line x1="</code>''a'' <code>y1="</code>''b''<code>" x2="</code>''c''<code>" y2="</code>''d''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. Diese Linie verbindet dann die Punkte (''a''|''b'') und (''c''|d).
*'''Rechtecke''' fügt man mit der Anweisung <code><rect x="</code>''x''<code>" y="</code>''y''<code>" width="</code>''Breite''<code>" height="</code>''Höhe''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''x'' und ''y'' markieren dabei die Koordinaten der oberen linken Ecke des Rechtecks.
*'''Rechtecke''' fügt man mit der Anweisung <code><rect x="</code>''x''<code>" y="</code>''y''<code>" width="</code>''Breite''<code>" height="</code>''Höhe''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''x'' und ''y'' markieren dabei die Koordinaten der oberen linken Ecke des Rechtecks.
*'''Kreise''' fügt man mit der Anweisung <code><circle cx="</code>''x''<code>" cy="</code>''y''<code>" r="</code>''Radius''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''cx'' und ''cy'' markieren dabei den Mittelpunkt des Kreises.
*'''Kreise''' fügt man mit der Anweisung <code><circle cx="</code>''x''<code>" cy="</code>''y''<code>" r="</code>''Radius''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''cx'' und ''cy'' markieren dabei den Mittelpunkt des Kreises.
*'''Ellipsen''' fügt man mit der Anweisung <code><ellipse cx="</code>''x''<code>" cy="</code>''y''<code>" rx="</code>''halbe Breite''<code>" ry="</code>''halbe Höhe''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''cx'' und ''cy'' markieren dabei den Mittelpunkt der Ellipse.
*'''Ellipsen''' fügt man mit der Anweisung <code><ellipse cx="</code>''x''<code>" cy="</code>''y''<code>" rx="</code>''halbe Breite''<code>" ry="</code>''halbe Höhe''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>"/></code> ein. ''cx'' und ''cy'' markieren dabei den Mittelpunkt der Ellipse.
*'''Polygone''', also beliebige Vielecke, fügt man mit der Anweisung <code><polygon points="</code>''a''<code>,</code>''b''<code> </code>''c''<code>,</code>''d''<code> </code>''e''<code>,</code>''f''<code> </code>...<code> </code>''y''<code>,</code>''z''<code>"/></code> ein, wobei eine Form entsteht, die die Punkte (''a''|''b''), (''c''|''d''), (''e''|''f'') ... und (''y''|''z'') miteinander verbindet. Es müssen mindestens drei und dürfen beliebig viele Punkte angegeben werden
*'''Polygone''', also eckige Formen mit beliebig vielen Ecken, fügt man mit der Anweisung <code><polygon points="</code>''a''<code>,</code>''b''<code> </code>''c''<code>,</code>''d''<code> </code>''e''<code>,</code>''f''<code> </code>...<code> </code>''y''<code>,</code>''z''<code>"/></code> ein, wobei eine Form entsteht, die die Punkte (''a''|''b''), (''c''|''d''), (''e''|''f'') ... und (''y''|''z'') miteinander verbindet. Es müssen mindestens drei und dürfen beliebig viele Punkte angegeben werden
*'''Texte''' werden mit folgender Anweisung erzeugt: <code><text x="</code>''x''<code>" y="</code>''y''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>" font-family="</code>''Schriftart''<code>"></code>''Hierhin kommt der Text''<code></text></code>. Am Punkt (''x''|''y'') beginnt dann eine gedachte waagerechte Linie, auf der der Text steht.
*'''Texte''' werden mit folgender Anweisung erzeugt: <code><text x="</code>''x''<code>" y="</code>''y''<code>" fill="</code>''Füllfarbe''<code>" stroke="</code>''Linienfarbe''<code>" font-family="</code>''Schriftart''<code>"></code>''Hierhin kommt der Text''<code></text></code>. Am Punkt (''x''|''y'') beginnt dann eine gedachte waagerechte Linie, auf der der Text steht.


=== Beispiel ===
=== Beispiel ===
[[Datei:Tasse mit Text.svg|mini|Das Bild, das von dem links stehenden Code erzeugt wird.]]
Der folgende SVG-Code erzeugt das Bild auf der rechten Seite:
Der folgende SVG-Code erzeugt das Bild auf der rechten Seite:<syntaxhighlight lang="xml" line="1">
[[Datei:Tasse mit Text.svg|mini|Das Bild, das von dem links stehenden Code erzeugt wird.|100x100px]]
<syntaxhighlight lang="xml" line="1">
<svg width="100" height="100">
<svg width="100" height="100">
<circle cx="40" cy="60" r="35" fill="red"/>
  <circle cx="40" cy="60" r="35" fill="red"/>
<rect x="5" y="25" width="70" height="35" fill="red"/>
  <rect x="5" y="25" width="70" height="35" fill="red"/>
<ellipse cx="75" cy="50" rx="20" ry="10" stroke="red" fill="none"/>
  <ellipse cx="75" cy="50" rx="20" ry="10" stroke="red" fill="none"/>
<polygon points="5,95 25,100 55,100 75,95" fill="red"/>
  <polygon points="5,95 25,100 55,100 75,95" fill="red"/>
<text x="13" y="50" fill="white" font-family="Source Sans Pro" font-weight="900">COFFEE</text>
  <text x="13" y="50" fill="white"
<text x="17" y="75" fill="white" font-family="Source Sans Pro" font-weight="900">LOVER</text>
        font-family="Source Sans Pro" font-weight="900">
    COFFEE
  </text>
  <text x="17" y="75" fill="white"
        font-family="Source Sans Pro" font-weight="900">
    LOVER
  </text>
</svg>
</svg>


</syntaxhighlight>
</syntaxhighlight>Der Körper der Tasse besteht dabei aus dem roten <code>circle</code> und dem roten <code>rect</code>, der Henkel wird von der <code>ellipse</code> gebildet, das <code>polygon</code> formt die Untertasse und zuletzt steht der Text in zwei Zeilen.


==Weblinks==
==Weblinks==


*[https://www.w3schools.com/graphics/svg_intro.asp SVG-Tutorial von W3Schools.com]
*[https://www.w3schools.com/graphics/svg_intro.asp SVG-Tutorial von W3Schools.com 🇬🇧]
*[https://developer.mozilla.org/en-US/docs/Web/SVG?retiredLocale=de SVG-Dokumentation von Mozilla]
*[https://developer.mozilla.org/en-US/docs/Web/SVG?retiredLocale=de SVG-Dokumentation von Mozilla 🇬🇧]
*[https://wiki.selfhtml.org/wiki/SVG SVG-Tutorial von SelfHTML]
*[https://wiki.selfhtml.org/wiki/SVG SVG-Tutorial von SelfHTML 🇩🇪]
[[Kategorie:Bildcodierung]]
[[Kategorie:Bildcodierung]]
[[Kategorie:XML]]
[[Kategorie:XML]]

Version vom 8. Februar 2023, 16:49 Uhr

SVG (Scalable Vector Graphics) ist ein Bild-Dateiformat, welches statt mit Pixeln mit Linien arbeitet. Es basiert auf der Dateiform XML.

Ein Vorteil des SVG-Formates gegenüber anderen Grafikformaten wie JPG oder PNG, insbesondere beim Arbeiten mit niedriger Datenverbindung, ist die Skalierbarkeit ohne Qualitätsverlust, gegenüber der Skalierbarkeit von pixel-basierten Rastergrafiken, deren Auflösung entsprechend des Pixel-Systems schlechter wird.

SVG-Bilder bestehen aus einer Reihe von Zeichen-Anweisungen, die von geeigneten Programmen, z.B. von den meisten Webbrowsern in Zeichnungen umgesetzt werden können. Diese Zeichenanweisungen orientieren sich an einem gedachten Koordinatensystem, dessen Ursprung in der oberen linken Ecke des Bildes liegt. Das heißt, jeder Punkt des Bildes hat eine x-Koordinate und eine y-Koordinate, die x-Koordinate ist 0 am linken Bildrand und wächst nach rechts, die y-Koordinate ist 0 am oberen Bildrand und wächst nach unten.

Struktur eines SVG-Bildes

Der Ursprung des SVG-Koordinatensystems liegt in der oberen linken Ecke des Bildes

Eine SVG-Datei beginnt immer mit einem öffnenden <svg> und endet mit einem schließenden </svg>. Im öffnenden <svg> sollten zusätzlich noch die Attribute width und height angegeben werden, die die Breite und Höhe des fertigen Bildes festlegen. Zu beachten ist die Schreibweise: eine Breite von 200 Einheiten wird als width="200" angegeben, wobei das Gleichheitszeichen und die Anführungszeichen wichtig sind.

<svg width="100" height="100">

<!-- hierhin kommen die Zeichenanweisungen -->

</svg>

Zeichen-Anweisungen

Jede Anweisung gibt für ein grafisches Objekt vor, wie es zu zeichnen ist. Dabei gibt es Anweisungen für Standardformen wie Kreise und Rechtecke und die sehr mächtige Form path, die quasi jede vorstellbare Gestalt annehmen kann.

  • Gerade Linien fügt man mit der Anweisung <line x1="a y1="b" x2="c" y2="d" stroke="Linienfarbe"/> ein. Diese Linie verbindet dann die Punkte (a|b) und (c|d).
  • Rechtecke fügt man mit der Anweisung <rect x="x" y="y" width="Breite" height="Höhe" fill="Füllfarbe" stroke="Linienfarbe"/> ein. x und y markieren dabei die Koordinaten der oberen linken Ecke des Rechtecks.
  • Kreise fügt man mit der Anweisung <circle cx="x" cy="y" r="Radius" fill="Füllfarbe" stroke="Linienfarbe"/> ein. cx und cy markieren dabei den Mittelpunkt des Kreises.
  • Ellipsen fügt man mit der Anweisung <ellipse cx="x" cy="y" rx="halbe Breite" ry="halbe Höhe" fill="Füllfarbe" stroke="Linienfarbe"/> ein. cx und cy markieren dabei den Mittelpunkt der Ellipse.
  • Polygone, also eckige Formen mit beliebig vielen Ecken, fügt man mit der Anweisung <polygon points="a,b c,d e,f ... y,z"/> ein, wobei eine Form entsteht, die die Punkte (a|b), (c|d), (e|f) ... und (y|z) miteinander verbindet. Es müssen mindestens drei und dürfen beliebig viele Punkte angegeben werden
  • Texte werden mit folgender Anweisung erzeugt: <text x="x" y="y" fill="Füllfarbe" stroke="Linienfarbe" font-family="Schriftart">Hierhin kommt der Text</text>. Am Punkt (x|y) beginnt dann eine gedachte waagerechte Linie, auf der der Text steht.

Beispiel

Der folgende SVG-Code erzeugt das Bild auf der rechten Seite:

Das Bild, das von dem links stehenden Code erzeugt wird.
<svg width="100" height="100">
  <circle cx="40" cy="60" r="35" fill="red"/>
  <rect x="5" y="25" width="70" height="35" fill="red"/>
  <ellipse cx="75" cy="50" rx="20" ry="10" stroke="red" fill="none"/>
  <polygon points="5,95 25,100 55,100 75,95" fill="red"/>
  <text x="13" y="50" fill="white"
        font-family="Source Sans Pro" font-weight="900">
    COFFEE
  </text>
  <text x="17" y="75" fill="white"
        font-family="Source Sans Pro" font-weight="900">
    LOVER
  </text>
</svg>

Der Körper der Tasse besteht dabei aus dem roten circle und dem roten rect, der Henkel wird von der ellipse gebildet, das polygon formt die Untertasse und zuletzt steht der Text in zwei Zeilen.

Weblinks