Start · Sprachen · JavaScript · Referenz · SVGFEConvolveMatrixElement.result

SVGFEConvolveMatrixElement.result

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>result</code>-Attribut eines <code>&lt;feConvolveMatrix&gt;</code>-Filterprimitivs als <code>SVGAnimatedString</code> liefert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGFEConvolveMatrixElement.result

Beschreibung

Die Eigenschaft result des Interfaces SVGFEConvolveMatrixElement spiegelt das SVG-Attribut result des Elements <feConvolveMatrix> wider. Über diesen Namen kann das Ergebnis der Faltung (z. B. Schärfen, Weichzeichnen, Kantenerkennung) von nachfolgenden Filterprimitiven im selben <filter> über deren in- bzw. in2-Attribut weiterverwendet werden.

Die Eigenschaft selbst ist schreibgeschützt: Sie liefert ein SVGAnimatedString-Objekt. Den aktuellen Wert liest und ändert man über result.baseVal; result.animVal enthält den (ggf. durch SMIL-Animation veränderten) aktuell wirksamen Wert und ist nur lesbar.

Typische Einsatzfälle sind das dynamische Aufbauen oder Umverdrahten von Filterketten per JavaScript, etwa wenn man eine Kantenerkennung mit <feComposite> oder <feMerge> mit dem Originalbild kombinieren will. Ist kein result-Attribut gesetzt, ist baseVal ein leerer String; das Ergebnis steht dann nur dem unmittelbar folgenden Primitiv als implizite Eingabe zur Verfügung.

Rückgabewert

Typ
SVGAnimatedString
Beschreibung
Objekt mit baseVal (lesbar/schreibbar, entspricht dem Attribut result) und animVal (nur lesbar, aktuell animierter Wert).

Beispiele

Result-Namen auslesen

// HTML:
// <svg width="0" height="0">
//   <filter id="schaerfen">
//     <feConvolveMatrix id="conv" order="3"
//       kernelMatrix="0 -1 0 -1 5 -1 0 -1 0" result="geschaerft" />
//   </filter>
// </svg>
const conv = document.getElementById('conv');
console.log(conv.result.baseVal);
console.log(conv.result.animVal);
geschaerft geschaerft

Result-Namen per JavaScript setzen und weiterverwenden

const SVG_NS = 'http://www.w3.org/2000/svg';
const filter = document.createElementNS(SVG_NS, 'filter');
filter.id = 'kanten';

const conv = document.createElementNS(SVG_NS, 'feConvolveMatrix');
conv.setAttribute('order', '3');
conv.setAttribute('kernelMatrix', '-1 -1 -1 -1 8 -1 -1 -1 -1');
conv.result.baseVal = 'kantenBild'; // setzt das Attribut result

const merge = document.createElementNS(SVG_NS, 'feMerge');
for (const quelle of ['SourceGraphic', conv.result.baseVal]) {
  const node = document.createElementNS(SVG_NS, 'feMergeNode');
  node.setAttribute('in', quelle);
  merge.append(node);
}

filter.append(conv, merge);
document.querySelector('svg').append(filter);
console.log(conv.getAttribute('result'));
kantenBild

Filterkette auf Konsistenz prüfen

// Findet in-Referenzen, zu denen kein result existiert
const pruefeFilter = (filter) => {
  const namen = new Set(
    [...filter.children]
      .map((el) => el.result?.baseVal)
      .filter(Boolean)
  );
  const standard = ['SourceGraphic', 'SourceAlpha', 'BackgroundImage',
    'BackgroundAlpha', 'FillPaint', 'StrokePaint'];
  return [...filter.querySelectorAll('[in], [in2]')]
    .flatMap((el) => [el.getAttribute('in'), el.getAttribute('in2')])
    .filter((ref) => ref && !namen.has(ref) && !standard.includes(ref));
};

console.log(pruefeFilter(document.getElementById('kanten')));
[]

// Wichtig · Fallstricke

  • Nicht direkt zuweisen: conv.result = 'x' hat keine Wirkung (bzw. wirft im Strict Mode einen TypeError). Immer conv.result.baseVal verwenden.
  • animVal ist nur lesbar; Schreibversuche werden ignoriert.
  • Result-Namen gelten nur innerhalb desselben <filter>-Elements. Verweist ein in auf einen unbekannten Namen, wird laut Spezifikation das Ergebnis des vorherigen Primitivs (bzw. SourceGraphic) verwendet – Fehler fallen daher oft nicht sofort auf.
  • Doppelte Namen sind erlaubt; spätere Primitive beziehen sich dann auf das zuletzt davor definierte Ergebnis gleichen Namens.
  • Elemente müssen mit createElementNS im SVG-Namensraum erzeugt werden, sonst fehlt die Eigenschaft.
  • Kompatibilität: In allen modernen Browsern unterstützt; die Eigenschaft ist über das Mixin SVGFilterPrimitiveStandardAttributes auf allen Filterprimitiven verfügbar.