SVG -Schlagschatten


<defs> und <filter>

Alle SVG-Filter werden innerhalb eines <defs>-Elements definiert. Das Element <defs> ist die Abkürzung für Definitionen und enthält die Definition spezieller Elemente (zB Filter).

Das Element <filter> wird verwendet, um einen SVG-Filter zu definieren. Das Element <filter> hat ein erforderliches id-Attribut, das den Filter identifiziert. Die Grafik zeigt dann auf den zu verwendenden Filter.


SVG <feOffset>

Beispiel 1

Das <feOffset>-Element wird verwendet, um Schlagschatteneffekte zu erzeugen. Die Idee ist, eine SVG-Grafik (Bild oder Element) zu nehmen und sie ein wenig in der xy-Ebene zu verschieben.

Das erste Beispiel versetzt ein Rechteck (mit <feOffset>) und blendet dann das Original über das versetzte Bild (mit <feBlend>):

feoffset

Hier ist der SVG-Code:

Beispiel

<svg height="120" width="120">
  <defs>
    <filter id="f1" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f1)" />
</svg>

Code-Erklärung:

  • Das id-Attribut des <filter>-Elements definiert einen eindeutigen Namen für den Filter
  • Das filter-Attribut des <rect>-Elements verknüpft das Element mit dem „f1“-Filter


Beispiel 2

Nun kann das versetzte Bild weichgezeichnet werden (mit <feGaussianBlur>):

feoffset2

Hier ist der SVG-Code:

Beispiel

<svg height="140" width="140">
  <defs>
    <filter id="f2" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f2)" />
</svg>

Code-Erklärung:

  • Das stdDeviation-Attribut des <feGaussianBlur>-Elements definiert die Stärke der Unschärfe

Beispiel 3

Jetzt machen Sie den Schatten schwarz:

feoffset3

Hier ist der SVG-Code:

Beispiel

<svg height="140" width="140">
  <defs>
    <filter id="f3" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f3)" />
</svg>

Code-Erklärung:

  • Das in-Attribut des <feOffset>-Elements wird in „SourceAlpha“ geändert, wodurch anstelle des gesamten RGBA-Pixels der Alpha-Kanal für die Unschärfe verwendet wird

Beispiel 4

Behandeln Sie nun den Schatten als Farbe:

feoffset4

Hier ist der SVG-Code:

Beispiel

<svg height="140" width="140">
  <defs>
    <filter id="f4" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feColorMatrix result="matrixOut" in="offOut" type="matrix"
      values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />
      <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />
      <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3"
  fill="yellow" filter="url(#f4)" />
</svg>

Code-Erklärung:

  • Der Filter <feColorMatrix> wird verwendet, um die Farben im Offset-Bild näher an Schwarz zu transformieren. Die drei Werte von '0,2' in der Matrix werden alle mit den roten, grünen und blauen Kanälen multipliziert. Das Reduzieren ihrer Werte bringt die Farben näher an Schwarz heran (Schwarz ist 0)