用 C# 将图像转换为 SVG – 将 JPG、PNG、BMP、TIFF、GIF 和 ICO 矢量化

矢量化是将光栅图像转换为矢量图形的过程,矢量图形使用贝塞尔曲线、样条曲线和线条等元素。这一过程至少包括颜色量化、检测单色图形的边界、用贝塞尔曲线或多边形对其进行逼近,以及通过降噪改善路径质量。结果以 SVG 文件等矢量图像格式保存。

Aspose.SVG for .NET 提供了两种功能强大的方法,可通过矢量化将光栅图像转换为 SVG 格式:

本文介绍使用 Converter.ConvertImageToSVG() 方法将JPGPNGBMPTIFFGIF和 ICO 等光栅图像转换为 SVG 的基本概念和实际示例。

要进一步了解如何使用 ImageVectorization API 将图像转换为矢量图形,请参阅 图像和文本矢量化 章节。您将看到图像矢量化过程的描述、矢量化算法和参数的使用,以及使用 Vectorize() 方法的 C# 示例。

将图像转换为 SVG

将光栅图像转换为 SVG 可实现可缩放、与分辨率无关的图形,这些图形在任何尺寸下都能保持清晰,是网页设计和其他应用的理想选择。下面的示例演示了如何使用 “ConvertImageToSVG() “方法将光栅 PNG 图像转换为 SVG:

添加以下命名空间

1using Aspose.Svg;
2using System.IO;
3using Aspose.Svg.Converters;
4using Aspose.Svg.ImageVectorization;

C# code for image to SVG conversion:

 1// Convert Image to SVG using C#
 2
 3// Prepare paths for a source image file and output SVG file
 4string imageFile = Path.Combine(DataDir, "flower-pink.png");
 5string outputFile = Path.Combine(OutputDir, "flower-pink.svg");
 6
 7// Create a configuration object
 8ImageVectorizerConfiguration configuration = new ImageVectorizerConfiguration
 9{
10    PathBuilder =
11                new BezierPathBuilder
12                {
13                    TraceSmoother = new ImageTraceSmoother(3),
14                    ErrorThreshold = 5,
15                    MaxIterations = 5
16                },
17    ColorsLimit = 15,
18    LineWidth = 2
19};
20
21// Convert Image to SVG
22Converter.ConvertImageToSVG(configuration, imageFile, outputFile);

图中显示了图像矢量化的结果:a) 原始 PNG 图像;b) 生成的 SVG:

文本 “将图像转换为 SVG 的结果 – 原始 PNG 图像 (a) 和转换后的 SVG (b) “

矢量化选项

要获得最佳效果,可以尝试使用不同的配置选项。例如,较低的颜色限制和较高的平滑度可以创建更加抽象和风格化的图像,而较高的精确度设置则可以保留更多细节,但会牺牲复杂性。

ImageVectorizerConfiguration 类的一些属性:

BezierPathBuilder 类的属性:

将流式图像转换为 SVG

Aspose.SVG for .NET既支持基于文件的工作流,也支持基于流的工作流,因此可灵活地用于桌面、网络和面向服务的应用程序。下面的示例展示了如何应用 ConvertImageToSVG(configuration, inputStream, outputFile) 方法将 JPG 转换为 SVG:

 1// Convert raster image JPG to vector SVG using C#
 2
 3// Prepare input and output
 4string imagePath = Path.Combine(DataDir, "tulip.jpg");
 5string outputFile = Path.Combine(OutputDir, "tulip.svg");
 6
 7// Open the image as a FileStream
 8using (FileStream inputStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
 9{
10    // Create vectorization configuration
11    ImageVectorizerConfiguration configuration = new ImageVectorizerConfiguration
12    {
13        PathBuilder = new BezierPathBuilder
14        {
15            TraceSmoother = new ImageTraceSmoother(1),
16            ErrorThreshold = 10,
17            MaxIterations = 1
18        },
19        ColorsLimit = 30,
20        LineWidth = 1
21    };
22
23    // Perform conversion from image stream to SVG
24    Converter.ConvertImageToSVG(configuration, inputStream, outputFile);
25}
26
27Console.WriteLine("Image converted to SVG successfully.");

图中显示了图像矢量化的结果:a) 原始 JPG 图像;b) 生成的 SVG:

文本 “将图像转换为 SVG 的结果–原始 JPG 图像(a)和转换后的 SVG 图像(b)”

结论和建议

  1. 使用 ConvertImageToSVG() 方法可通过自定义设置快速将图像转换为 SVG。
  2. 使用以下建议可获得最佳效果和性能:
  1. 在处理上传文件、内存图像或云数据时,使用基于流的输入,这样可以避免临时文件,提高性能。
  2. 对于大型数据集,建立一个循环来批量转换图像,并进行错误处理和记录。
  3. 请务必在浏览器或矢量编辑器中打开并检查生成的 SVG,以验证质量。

另见

Aspose.SVG 提供免费的在线 图像到 SVG 转换器,可在任何平台上运行,并提供准确高效的转换。使用此应用程序,您可以应用一系列选项来实现完美的结果。节省您的时间,使用这款免费的图像到 SVG 转换器,获取矢量图形的所有好处!

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.