Paint Builder – 创建 SVG 图案 – C#

SVG图案 SVG – Pattern

SVG 模式(SVG图案,马赛克,SVG Pattern) 提供了一种在 SVG 文档中填充形状和元素的通用方法。图案允许您创建复杂的纹理、背景和重复图案,增强 SVG 图形的视觉吸引力。

SVG 图案是可重复使用的图形元素,可应用于填充 SVG 文档中的形状、文本和路径。它们定义了可以在整个区域重复或放置的图形图案,为创建不同的视觉效果提供了灵活性。 SVG 模式是使用<pattern>元素定义的,该元素包含定义该模式的图形元素(形状、图像或渐变)和属性。

Aspose.SVG Builder API 提供了 SVGPatternElementBuilder,它是一个用于构造 SVG <pattern> 元素的构建器类。此类提供了设置特定于<pattern>元素的各种属性并构建其内容的方法。此外,SVG Builder API 引入了语法糖来进一步完善 SVG 创建和操作的过程。这包括各种 SVG 元素的嵌套构建器,提供更直观、更有效的方式来定义复杂的 SVG 结构。

本文涉及 PaintBuilder,它是一个用于为 SVG 元素创建绘制值的构建器类。此类用于在使用任何绘画、图案或渐变填充各种 SVG 形状和元素时指定strokefill属性的值。

油漆生成器 – Paint Builder

PaintBuilder 用于指定在使用图案、渐变或任何绘画填充各种 SVG 形状和元素时所使用的描边或填充的值。在以下示例中,PaintBuilder 类的 PaintServerId() 方法通过Id设置绘画服务器的颜色填充。

 1using Aspose.Svg.Builder;
 2using System.Drawing;
 3using System.IO;
 4...
 5    using (var document = new SVGDocument())
 6    {
 7        var svg = new SVGSVGElementBuilder()
 8            .Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
 9            .ViewBox(0, 0, 400, 400)
10            .AddG(g => g
11                .AddPattern(p => p.Id("stars")
12                    .ViewBox(0, 0, 20, 20)
13                    .Width(5, LengthType.Percentage)
14                    .Height(5, LengthType.Percentage)
15                    .PatternUnits(CoordinateUnits.UserSpaceOnUse)
16                    .AddPolygon(points: new double[] { 5, 0, 7, 3, 10, 5, 7, 7, 5, 10, 3, 7, 0, 5, 3, 3 }, fill: Color.Teal)
17                    .AddPolygon(points: new double[] { 15, 0, 17, 3, 20, 5, 17, 7, 15, 10, 13, 7, 10, 5, 13, 3 }, fill: Color.DarkRed)
18                    .AddPolygon(points: new double[] { 15, 10, 17, 13, 20, 15, 17, 17, 15, 20, 13, 17, 10, 15, 13, 13 },  fill: Color.DarkBlue)
19                )
20                .AddRect(r => r.Rect(20, 40, 440, 80).Fill(pt => pt.PaintServerId("stars")))
21                )
22            .Build(document.FirstChild as SVGSVGElement);
23        document.Save(Path.Combine(OutputDir, "pattern-stars.svg"));
24    }

在此示例中,首先使用 AddPattern() 定义图案,其中组合各种彩色多边形以创建复杂的填充图案。 AddPattern() 方法向构建器添加一个 <pattern> 元素配置。该模式被赋予标识符"stars"。随后,使用Fill()方法和PaintServerId("stars")引用先前定义的模式,将此模式应用于矩形元素。

文本“可视化"stars"图案”

创建 SVG 图案

以下 C# 代码示例演示了如何创建 SVG 图案并将其应用到文档中的形状。该代码展示了构建器中的构建器方法,该方法使用多个构建器类,其中一个构建器嵌套在另一个构建器中,以方便构建复杂的对象或结构,并为 SVG 文档创建提供模块化和结构化的方法:

 1using Aspose.Svg.Builder;
 2using System.Drawing;
 3using System.IO;
 4...
 5    using (var document = new SVGDocument())
 6    {
 7        var svg = new SVGSVGElementBuilder()
 8            .Width(100, LengthType.Percentage).Height(100, LengthType.Percentage)
 9            .ViewBox(0, 0, 600, 600)
10            .AddG(g => g
11                .FontFamily("Arial")
12                .FontSize(10)
13                .AddPattern(p => p.Id("Pat3a")
14                    .Rect(0, 0, 20, 20)
15                    .PatternUnits(CoordinateUnits.UserSpaceOnUse)
16                    .AddRect(r => r.Rect(0, 0, 10, 10).Fill(Color.LightSlateGray))
17                    .AddRect(r => r.Rect(10, 0, 10, 10).Fill(Color.Teal))
18                    .AddRect(r => r.Rect(0, 10, 10, 10).Fill(Color.DarkRed))
19                    .AddRect(r => r.Rect(10, 10, 10, 10).Fill(Color.Gold))
20                )
21                .AddPattern(p => p.Id("Pat3b")
22                    .Href("#Pat3a")
23                    .Width(23).Height(23)
24                )
25                .AddPattern(p => p.Id("Pat3c")
26                    .Href("#Pat3a")
27                    .Width(15).Height(15)
28                )
29                .AddCircle(circle => circle.Cx(90).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3a")))
30                .AddText(t => t.X(55).Y(50)
31                    .AddContent("Pattern #Pat3a")
32                )
33                .AddCircle(circle => circle.Cx(240).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3b")))
34                .AddText(t => t.X(205).Y(50)
35                    .AddContent("Pattern #Pat3b")
36                )
37                .AddCircle(circle => circle.Cx(390).Cy(130).R(70).Fill(pt => pt.PaintServerId("Pat3c")))
38                .AddText(t => t.X(355).Y(50)
39                    .AddContent("Pattern #Pat3c")
40                )
41            )
42            .Build(document.FirstChild as SVGSVGElement);
43        document.Save(Path.Combine(OutputDir, "patterns.svg"));
44    }

文本“可视化patterns.svg 文件”

在该示例中,将名为 Pat3a、Pat3b 和 Pat3c 的三种不同模式添加到 SVG 文档中。

图案元素中图块的高度和宽度定义了 SVG 文档中重复图案单元的大小。此大小决定了图案应用于文档中的形状或元素时的外观。在图案 Pat3b 中,增加图块的高度和宽度会放大图案单元,从而导致未填充(透明)区域。在图案Pat3c中,减少瓷砖的高度和宽度使图案显得更密集,产生不同的视觉效果。

因此,通过调整 SVG <pattern> 元素中图块的高度和宽度,您可以控制 SVG 文档中图案的密度和重复性,并能够创建不同的视觉效果。

也可以看看

  • Element Builders 文章深入研究了 Aspose.SVG Builder API 中使用的 Element Builders。您将了解 SVGElementBuilder 类、其专用构建器以及它们如何简化 SVG 编程。
  • 请参阅 Path Builder 文章了解有关 PathBuilder 类的更多信息,该类旨在简化 SVG 路径的创建和操作。本文展示了路径生成器如何提供直观的语法来以编程方式定义 SVG 路径,使开发人员能够简化创建复杂形状和曲线的过程。
  • Rule Builder 文章介绍的是 RuleBuilder 类,它是一个用于在 SVG 文档中构建 CSS 样式规则的构建器类。
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.