C#生成SVG文件(文本、线段、圆、椭圆、多边形的示例)

1. 介绍

一些参考博客:
C#生成SVG涉及文字、线段、椭圆的示例
用C#解析渲染显示SVG矢量图转化格式保存
C#操作SVG矢量图-nuget库svg

开源库:https://github.com/svg-net/SVG

在NuGet上搜索SVG并安装:

2. 示例

引入的命名空间:

csharp 复制代码
using Svg;
using Svg.Pathing;
using Svg.Transforms;
using System.Drawing;

下面分别给出示例代码和示意图。

2.1 文字

csharp 复制代码
public static void DrawText()
{
    SvgDocument doc = new SvgDocument();
    var text = new SvgText
    {
        Text = "Hello Svg",
        FontSize = 20,
        Transforms = new SvgTransformCollection
        {
            new SvgTranslate(100, 100),//位置
            new SvgRotate(10),//顺时针旋转10度
            new SvgScale(2)//缩放
        },
        Fill = new SvgColourServer(Color.Blue)//颜色
    };
    doc.Children.Add(text);

    var text2 = new SvgText
    {
        Text = "Hello World!",
        FontSize = 15,
        Transforms = new SvgTransformCollection
        {
            new SvgTranslate(0, 0),//位置
            new SvgRotate(90),//顺时针旋转90度
            new SvgScale(2)//缩放
        },
        Fill = new SvgColourServer(Color.Red)//颜色
    };
    doc.Children.Add(text2);
    doc.Write(@"./文本.svg");
}

2.2 线段

csharp 复制代码
public static void DrawLine()
{
    SvgDocument doc = new SvgDocument();

    var line = new SvgLine
    {
        StartX = new SvgUnit(0),
        StartY = new SvgUnit(0),
        EndX = new SvgUnit(100),
        EndY = new SvgUnit(200),
        StrokeWidth = 1,
        Stroke = new SvgColourServer(Color.Black)
    };
    doc.Children.Add(line);

    var line2 = new SvgLine
    {
        StartX = new SvgUnit(100),
        StartY = new SvgUnit(0),
        EndX = new SvgUnit(100),
        EndY = new SvgUnit(100),
        StrokeWidth = 1,
        Stroke = new SvgColourServer(Color.Black)
    };
    doc.Children.Add(line2);

    doc.Write(@"./线.svg");
}

2.3 圆

csharp 复制代码
public static void DrawCircle()
{
    SvgDocument doc = new SvgDocument();
    var circle = new SvgCircle
    {
        Color = new SvgColourServer(Color.Blue),
        CenterX = new SvgUnit(100),
        CenterY = new SvgUnit(100),
        StrokeWidth = 1,
        Stroke = new SvgColourServer(Color.Black),
        Radius = 50,
        Opacity = 0.6f,
        Fill = new SvgColourServer(Color.Green),
    };
    doc.Children.Add(circle);
    doc.Write(@"./圆.svg");
}

2.4 椭圆

csharp 复制代码
public static void DrawEllipse()
{
    SvgDocument doc = new SvgDocument();
    var ellipse = new SvgEllipse
    {
        Color = new SvgColourServer(Color.Blue),
        CenterX = new SvgUnit(100),
        CenterY = new SvgUnit(100),
        StrokeWidth = 1,
        Stroke = new SvgColourServer(Color.Black),
        RadiusX = 80,
        RadiusY = 50,
        Opacity = 0.6f,
        Fill = new SvgColourServer(Color.Green),
    };
    doc.Children.Add(ellipse);
    doc.Write(@"./椭圆.svg");
}
        

2.5 多边形

csharp 复制代码
public static void DrawPolygon()
{
    //要绘制的图形的点坐标序列
    var pts = new PointF[]
    {
        new PointF(100, 100),
        new PointF(60, 150),
        new PointF(150, 200),
        new PointF(100, 300),
        new PointF(300, 300),
        new PointF(200, 100),
        new PointF(100, 100),//和起点坐标相同,确保闭合
    };

    var pathData = new SvgPathSegmentList();
    //按绝对坐标设置笔触起笔位置
    var svgMove = new SvgMoveToSegment(false, pts[0]);
    pathData.Add(svgMove);
    //按绝对坐标添加线段
    for (int i = 0; i < pts.Length; i++)
    {
        var line = new SvgLineSegment(false, pts[i]);
        pathData.Add(line);
    }

    SvgPath path = new SvgPath
    {
        PathData = pathData,
        StrokeWidth = 1,
        Stroke = new SvgColourServer(Color.Black),
        Opacity = 0.6f,
        Fill = new SvgColourServer(Color.Green),
    };

    SvgDocument doc = new SvgDocument();
    doc.Children.Add(path);

    doc.Write(@"./多边形.svg");//保存
}
相关推荐
成都易yisdong3 小时前
纬地、鸿业、海地、CASS等横断面数据互转工具V3.2——测绘与道路设计人员的效率神器
c#·visual studio code
AIKZX7 小时前
西门子博途 TIA Portal v18 中文版图文安装教程(超级详细)附下载链接
开发语言·c#·编辑器·idea
xiaoshuaishuai89 小时前
C# 数字资源分发
开发语言·c#
格林威10 小时前
面阵相机 vs 线阵相机:堡盟与Basler选型差异全解析 +C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
少控科技11 小时前
小数典 - V1.0.0.1
windows·c#
格林威12 小时前
面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附C# 实战演示
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
刘~浪地球13 小时前
日志平台架构设计
c#·linq
玖笙&13 小时前
✨WPF编程进阶【9.1】:WPF资源完全指南(附源码)
c++·c#·wpf·visual studio
hhb_6181 天前
Dylan 语言核心特性与工程实践深度解析
开发语言·c#
CSharp精选营1 天前
最新.NET新手入门学习网站合集(2026更新版)
c#·学习资料·开发教程·.net 新手入门·开放资源·.net网站