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");//保存
}
相关推荐
沃码1 小时前
【Lively Wallpaper 】插件开发:LivelyProperties.json 全流程实战教程
c#·json·livelywallpaper·视频壁纸
github.com/starRTC6 小时前
Claude Code中英文系列教程34:再谈Skills
开发语言·c#·ai编程
bugcome_com8 小时前
C# 判断语句详解(if、switch、三目运算符、Null 条件运算符)
c#
霸王•吕布11 小时前
C#-使用OpenTK渲染3D模型
c#·opentk·glcontrol
游乐码11 小时前
c#封装成员变量和成员方法和访问修饰符
开发语言·c#
Never_Satisfied11 小时前
在c#中,Jint的AsString()和ToString()的区别
服务器·开发语言·c#
Never_Satisfied11 小时前
在c#中,获取文件的大小
java·开发语言·c#
weixin_4684668512 小时前
PyTorch导出ONNX格式分割模型及在C#中调用预测
人工智能·pytorch·深度学习·c#·跨平台·onnx·语义分割
光泽雨20 小时前
C# 中 Assembly 类详解
开发语言·c#
少控科技20 小时前
C#基础训练营 - 02 - 运算器
开发语言·c#