Gaußscher Weichzeichner – SVG-Filter – C#-Code

SVG-Filter

Mit Aspose.SVG für .NET können Sie ein SVG-Dokument öffnen oder erstellen, bearbeiten und Änderungen an seinem Inhalt vornehmen. Sie können das Dokument ändern und die zahlreichen verfügbaren Filter anwenden, um das gewünschte Ergebnis zu erzielen. Der Namespace Aspose.Svg.Filters enthält Klassen und Schnittstellen, die sich auf Filtereffekte in der SVG-Spezifikation beziehen. Die Klasse SVGFEGaussianBlurElement entspricht einem <feGaussianBlur>-Element zur Implementierung des Gaußschen Weichzeichnungseffekts.

In SVG wird ein Filter durch das Element <filter> definiert, das innerhalb eines Elements <defs> festgelegt wird. Es wird nie selbst gerendert und konzeptionell als das Element beschrieben, das seine untergeordneten Elemente – Filterprimitive – einschließt. Das Element <filter> verfügt über eine Reihe von Attributen. Erforderliche Attribute für das Filterprimitiv sind x, y, width, height und id. Sie legen den Bereich des Bildes fest, auf den der Filter angewendet wird. Und das Attribut id gibt einem SVG-Element eine eindeutige Kennung und identifiziert ein Element innerhalb eines SVG-Dokuments.

In diesem Artikel erfahren Sie, wie Sie SVG-Code schreiben, um einen Gaußschen Weichzeichnerfilter zu erstellen, und betrachten detaillierte C#-Beispiele für die Verwendung der SVGFEGaussianBlurElement-Klasse, um den Gaußschen Weichzeichnereffekt auf SVG-Elemente und Bitmaps anzuwenden.

Gaußscher Weichzeichner – SVG-Code

Der Gaußsche Unschärfe-SVG-Filter ist ein Filtertyp, der mithilfe einer Gaußschen Verteilung einen Unschärfeeffekt auf den Inhalt eines SVG-Elements anwendet. Dies ist einer der am häufigsten verwendeten Filter in SVG, um weiche, glatte und optisch ansprechende Effekte zu erzeugen. Der Filter <feGaussianBlur> erzeugt einen weichen Unschärfeeffekt. Das Attribut stdDeviation gibt die Zahl an, die die Standardabweichung für den Unschärfevorgang charakterisiert. Wenn zwei Zahlen angegeben werden, stellt die erste Zahl einen Standardabweichungswert entlang der x-Achse des Koordinatensystems dar und die zweite – auf der y-Achse. Für jeden Filter ist ein Quellbild zur Verarbeitung erforderlich. Andernfalls kann der Filter nichts rendern und funktioniert daher nicht. Die Eingabedaten des Filterprimitivs werden im Attribut in angegeben. Der Standardwert ist in="SourceGraphic".

Hier ist ein Beispiel für die Anwendung eines Gaußschen Unschärfe-SVG-Filters mit verschiedenen Werten des Attributs stdDeviation auf ein SVG-Rechteckelement:

 1<svg height="150" width="750" xmlns="http://www.w3.org/2000/svg">
 2    <defs>
 3        <filter id="f1" x="-20" y="-20" height="100" width="100">
 4            <feGaussianBlur in="SourceGraphic" stdDeviation="10" />
 5        </filter>
 6        <filter id="f2" x="-20" y="-20" height="100" width="100">
 7            <feGaussianBlur in="SourceGraphic" stdDeviation="10, 0" />
 8        </filter>
 9        <filter id="f3" x="-20" y="-20" height="100" width="100">
10            <feGaussianBlur in="SourceGraphic" stdDeviation="0,10" />
11        </filter>
12		<filter id="f4" x="-20" y="-20" height="100" width="100">
13            <feGaussianBlur in="SourceGraphic" stdDeviation="20" />
14        </filter>
15		<filter id="f5" x="-20" y="-20" height="100" width="100">
16            <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
17        </filter>
18    </defs>
19    <g fill="#ffa500">
20        <rect x="40" y="40" width="60" height="60" />
21        <rect x="40" y="40" width="60" height="60" transform="translate(120)" filter="url(#f1)" />
22        <rect x="40" y="40" width="60" height="60" transform="translate(240)" filter="url(#f2)" />
23        <rect x="40" y="40" width="60" height="60" transform="translate(360)" filter="url(#f3)" />
24		<rect x="40" y="40" width="60" height="60" transform="translate(480)" filter="url(#f4)" />
25		<rect x="40" y="40" width="60" height="60" transform="translate(600)" filter="url(#f5)" />
26    </g>
27</svg>

Text „Sechs Rechtecke veranschaulichen den Gaußschen Unschärfeeffekt mit den verschiedenen stdDeviation-Werten“

Wie Sie sehen, steuert der Wert stdDeviation die Streuung der Gaußschen Verteilung. Ein größerer stdDeviation-Wert führt zu mehr Unschärfe, während ein kleinerer Wert einen weicheren Effekt erzeugt. Hinweis: Durch die um eine Form herum hinzugefügte Unschärfe wird das Ausgabebild oft größer als das Quellbild. Wir müssen negative Zahlen für x und y verwenden, um ein Abschneiden der durch den Filter hinzugefügten Grafiken zu vermeiden. Im obigen Beispiel verwenden wir x="-20" und y="-20".

Gaußscher Weichzeichner – C#-Code

Im vorherigen SVG-Codebeispiel haben wir ausführlich besprochen, wie man einen Gaußschen Unschärfefilter erstellt, und jetzt wissen wir, welche Elemente und Attribute wir verwenden müssen. Lassen Sie uns den C#-Code erstellen, um einen solchen Filter mithilfe von Aspose.SVG für die .NET-API zu implementieren.

Gemäß der SVG-Syntax sollte sich das <filter>-Element in einem <defs>-Element befinden und das Filterprimitiv <feGaussianBlur> befindet sich nur innerhalb des <filter>-Elements. Um SVG-Filter zu programmieren, müssen Sie daher die erforderlichen Elemente korrekt erstellen und verschachteln.

  1. Wenn Sie ein SVG-Dokument von Grund auf erstellen, verwenden Sie den Konstruktor SVGDocument(), um ein leeres SVG-Dokument zu erstellen.
  2. Die Eigenschaft RootElement der SVGDocument-Klasse zeigt auf das Stammelement <svg> des Dokuments.
  3. Erstellen Sie ein <rect>-Element, legen Sie die erforderlichen Attribute fest und fügen Sie es dem <svg>-Element hinzu.
    • Verwenden Sie die Methode CreateElementNS(namespaceURI, qualifiedName) der SVGDocument-Klasse, um eine Instanz von SVGRectElement zu erstellen.
    • Eine Möglichkeit zum Festlegen der Werte des Attributs ist die Verwendung der Methode SetAttribute(name, value). Eine andere Möglichkeit besteht darin, SVG-DOM-Punktzugriffsmethoden zu verwenden, die Eigenschaften des Typs SVGAnimatedLength verwenden, deren statische Daten über die Konstruktion element.X.BaseValue festgelegt oder gelesen werden können.
    • Verwenden Sie die Methode AppendChild(), um das Element <rect> zum Element <svg> hinzuzufügen.
  4. Erstellen Sie auf ähnliche Weise ein <defs>-Element und fügen Sie es dem <svg>-Element hinzu.
  5. Um ein <filter>-Element zu erstellen, verwenden Sie denselben Algorithmus: Verwenden Sie die Methode CreateElementNS(), um eine Instanz von SVGFilterElement zu erstellen. Denken Sie daran, die Attribute x, y, height, width und id mit der SetAttribute()-Methode festzulegen und den <filter> zum <defs>-Element hinzuzufügen.
  6. Erstellen Sie ein <feGaussianBlur>-Element und legen Sie die Attribute in und stdDeviation fest. Fügen Sie es dann dem Element <filter> hinzu.
    • Verwenden Sie die Methode CreateElementNS(), um eine Instanz der Klasse SVGFEGaussianBlurElement zu erstellen.
    • Um das Attribut In1 festzulegen, verwenden Sie die Eigenschaft des Typs SVGAnimatedLength, deren statische Daten über die Konstruktion feGaussianBlurElement.In1.BaseVal = "SourceGraphic" festgelegt oder gelesen werden können.
    • Verwenden Sie die Eigenschaften StdDeviationX und StdDeviationY der SVGFEGaussianBlurElement-Klasse, um das setDerivation-Attribut festzulegen.
    • Rufen Sie die AppendChild()-Methode auf, um <feGaussianBlur> zum <filter>-Element hinzuzufügen.
  7. Rufen Sie die Methode Save() auf, um das Dokument in einer durch den Pfad angegebenen lokalen Datei zu speichern.
 1using Aspose.Svg;
 2using System.IO;
 3using Aspose.Svg.Filters;
 4...
 5
 6    // Set SVG Namespace Url
 7    string SvgNamespace = "http://www.w3.org/2000/svg";
 8
 9    using (var document = new SVGDocument())
10    {
11        var svgElement = document.RootElement;
12
13        // Create a <rect> element and set the "fill" and "filter" attributes
14        var rectElement = (SVGRectElement)document.CreateElementNS(SvgNamespace, "rect");
15        rectElement.X.BaseVal.Value = 40;
16        rectElement.Y.BaseVal.Value = 40;
17        rectElement.Width.BaseVal.Value = 60;
18        rectElement.Height.BaseVal.Value = 60;
19        rectElement.SetAttribute("fill", "#ffa500");
20        rectElement.SetAttribute("filter", "url(#F1)");
21        svgElement.AppendChild(rectElement);
22
23        // Create a <defs> element and add it to the <svg> element
24        var defsElement = (SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
25        svgElement.AppendChild(defsElement);
26
27        // Create a <filter> element and add it to the <defs> element
28        var filterElement = (SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
29        filterElement.SetAttribute("x", "-20px");
30        filterElement.SetAttribute("y", "-20px");
31        filterElement.SetAttribute("height", "100px");
32        filterElement.SetAttribute("width", "100px");
33        filterElement.Id = "F1";
34        defsElement.AppendChild(filterElement);
35
36        // Create a <feGaussianBlur> element and add it to the <filter> element
37        var feGaussianBlurElement = (SVGFEGaussianBlurElement)document.CreateElementNS(SvgNamespace, "feGaussianBlur");
38        feGaussianBlurElement.In1.BaseVal = "SourceGraphic";
39        feGaussianBlurElement.StdDeviationX.BaseVal = 10;
40        feGaussianBlurElement.StdDeviationY.BaseVal = 10;
41        filterElement.AppendChild(feGaussianBlurElement);
42
43        // Save the document
44        document.Save(Path.Combine(OutputDir, "gaussian-blur.svg"));
45    }

Wenn Sie die Ergebnisdatei rendern, sehen Sie ein unscharfes orangefarbenes Rechteck, genau wie das in der vorherigen Abbildung, an zweiter Stelle mit stdDeviation=“10”.

Hintergrundbild verwischen

Um den SVG-Filter „Gaußsche Unschärfe“ für die Hintergrundunschärfe zu verwenden, können Sie den Filter auf ein SVG-Element anwenden, das als Hintergrund hinter dem Hauptinhalt fungiert. Es kann sich beispielsweise um eine beliebige Bitmap handeln. Mit dem Unschärfefilter können Sie einen optisch ansprechenden Hintergrundunschärfeeffekt erzeugen und gleichzeitig den Vordergrundinhalt scharf und scharf halten.

Befolgen Sie diese wenigen Schritte, um mit SVG eine Hintergrundunschärfe zu erzielen. Sie ähneln den im vorherigen C#-Beispiel beschriebenen Schritten:

  1. Erstellen Sie eine Instanz der Klasse SVGDocument.
  2. Die Eigenschaft RootElement der SVGDocument-Klasse zeigt auf das Stammelement <svg> des Dokuments.
  3. Sie können die Methode CreateElementNS(namespaceURI, qualifiedName) der SVGDocument-Klasse verwenden, um Instanzen von SVGImageElement, SVGDefsElement, SVGFilterElement zu erstellen. und SVGFEGaussianBlurElement Klassen.
    Wenn Sie beispielsweise planen, eine Bitmap als Hintergrund zu verwenden, erstellen Sie eine Instanz der Klasse SvgImageElement und legen Sie Attribute fest, die ihre Quelle, Position und Größe angeben. Um ein imageElement zu svgElement hinzuzufügen, können Sie die Methode AppendChild() verwenden. Die Verwendung eines filter-Attributs von imageElement, das auf den URL-Namen von filterElement (im id-Attribut) verweist, ermöglicht die Anwendung des SVG-Filtereffekts auf das Bild.
  4. Fügen Sie den erstellten Elementen alle erforderlichen Attribute hinzu und verschachteln Sie sie ordnungsgemäß.
  5. Nachdem Sie einen Unschärfefilter erstellt und eine filterElement.Id für das <filter>-Element festgelegt haben, kann dieser auf das Bild angewendet werden.
  6. Rufen Sie die Methode Save() auf, um das Dokument mit dem unscharfen Hintergrundbild in einer durch den Pfad angegebenen lokalen Datei zu speichern.

Hier ist ein Beispiel, das die Implementierung von Unschärfe-Hintergrundbildern veranschaulicht:

 1using Aspose.Svg;
 2using System.IO;
 3using Aspose.Svg.Filters;
 4...
 5
 6    // Set SVG Namespace Url
 7    string SvgNamespace = "http://www.w3.org/2000/svg";
 8
 9    using (var document = new SVGDocument())
10    {
11        var svgElement = document.RootElement;
12
13        // Create an <image> element and add to the <svg> element
14        var imageElement = (SVGImageElement)document.CreateElementNS(SvgNamespace, "image");
15        imageElement.Href.BaseVal = "http://docs.aspose.com/svg/images/api/seaside.jpg";
16        imageElement.Height.BaseVal.Value = 480;
17        imageElement.Width.BaseVal.Value = 640;
18        imageElement.X.BaseVal.Value = 20;
19        imageElement.Y.BaseVal.Value = 20;
20        imageElement.SetAttribute("filter", "url(#F1)");
21        svgElement.AppendChild(imageElement);
22
23        // Create a <defs> element and add to the <svg> element
24        var defsElement = (SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
25        svgElement.AppendChild(defsElement);
26
27        // Create a <filter> element and add to the <defs> element
28        var filterElement = (SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
29        filterElement.Id = "F1";
30        defsElement.AppendChild(filterElement);
31
32        // Create a <feGaussianBlur> element and add to the <filter> element
33        var feGaussianBlurElement = (SVGFEGaussianBlurElement)document.CreateElementNS(SvgNamespace, "feGaussianBlur");
34        feGaussianBlurElement.In1.BaseVal = "SourceGraphic";
35        feGaussianBlurElement.StdDeviationX.BaseVal = 5;
36        feGaussianBlurElement.StdDeviationY.BaseVal = 5;
37        filterElement.AppendChild(feGaussianBlurElement);
38
39        // Save the document
40        document.Save(Path.Combine(OutputDir, "blur-background-image.svg"));
41    }

Text „Originalbild und Hintergrundbild verwischen“

Hintergrundbild verwischen – mit der SVG Builder API

Die Aspose.SVG Builder-API wurde für die optimierte Erstellung und Aktualisierung von SVG-Elementen in C# entwickelt. Schauen wir uns ein C#-Beispiel für die Implementierung der Hintergrundunschärfe an (genau das gleiche Beispiel wie im vorherigen Absatz) mit der SVG Builder API. Dieser Code demonstriert die Verwendung eines Fluent-Builder-Musters (fluent builder pattern) zum Erstellen prägnanter und lesbarer SVG-Dokumente unter Nutzung der Funktionen der Aspose.SVG-Bibliothek:

 1using Aspose.Svg.Builder;
 2using System.IO;
 3...
 4
 5    var svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\"></svg>";
 6    using (var document = new SVGDocument(svgContent, "."))
 7    {
 8        // Create an instance of SVGSVGElementBuilder to facilitate the construction of the <svg> element and its child elements using a fluent builder pattern
 9        var svg = new SVGSVGElementBuilder()
10            .AddDefs(d => d
11                .AddFilter(f => f.Id("gaussian-blur")
12                    .AddFeGaussianBlur(g => g
13                    .StdDeviation(5, 5)
14                    )
15                )
16            )
17            .AddImage(i => i
18                .X(20).Y(20).Height(480).Width(640)
19                .Href("http://docs.aspose.com/svg/images/api/seaside.jpg")
20                .Filter(fl => fl
21                    .FilterId("gaussian-blur")
22                )
23            )
24            // Call the Build() method on the SVGSVGElementBuilder to construct the <svg> element with its child elements
25            .Build(document.FirstChild as SVGSVGElement);
26        document.Save(Path.Combine(OutputDir, "gaussian-blur-builder.svg"));
27    }

Mit dem Fluent Builder-Muster können Sie SVG-Elemente präziser und lesbarer erstellen und Filter anwenden. Jeder Methodenaufruf gibt deutlich seinen Zweck an, sodass Sie die Struktur des SVG-Dokuments auf einen Blick verstehen können. Dieses Beispiel zeigt einen aussagekräftigeren Ansatz zum Erstellen von SVG-Dokumenten mit SVG Builder und bietet eine verbesserte Lesbarkeit, Wartbarkeit und Flexibilität im Vergleich zum manuellen Ansatz zum Erstellen von Elementen, der im vorherigen Beispiel gezeigt wurde.

Siehe auch

  • Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.
  • Informationen zum Herunterladen von GitHub und zum Ausführen von Beispielen finden Sie im Abschnitt So führen Sie die Beispiele aus.
  • Weitere Informationen zu Filterprimitiven finden Sie auf der Seite W3C Filter Effects Module und im Artikel SVG-Filter und -Verläufe.
  • Aspose.SVG bietet kostenlose SVG-Webanwendungen zum Konvertieren von SVG- oder Bilddateien, Zusammenführen von SVGs, Bildvektorisierung, SVG-Sprite-Generierung, SVG-zu-Base64-Datenkodierung und mehr. Diese Online-Anwendungen funktionieren auf jedem Betriebssystem mit einem Webbrowser und erfordern keine zusätzliche Softwareinstallation. Es ist eine schnelle und einfache Möglichkeit, Ihre SVG-bezogenen Aufgaben effizient und effektiv zu lösen!
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.