用 C# 将 SVG 转换为 PNG

PNG 文件格式支持无损图像压缩,因此深受用户欢迎。它有两大用途:万维网和图像编辑。它广泛用于在网络上传输图片、在网页上显示照片和图形以及在云存储中保存。SVG 在网页上的使用有一些限制,因此有时需要将 SVG 转换为 PNG。使用 Aspose.HTML,您可以通过编程将 SVG 转换为 PNG 格式,并完全控制各种转换参数。

在本文中,您可以找到通过使用转换器类的 ConvertSVG() 方法并应用 ImageSaveOptionsICreateStreamProvider 参数将 SVG 转换为 PNG 的信息。 此外,您还可以尝试使用在线 SVG 转换器来测试 Aspose.HTML API 的功能并即时转换 SVG。

在线 SVG 转换器

您可以使用 Aspose.HTML API 将 SVG 实时转换为其他格式。请从本地文件系统加载 SVG,选择输出格式并运行示例。保存选项为默认设置。您将立即以单独文件的形式收到转换结果。

                
            

如果您想通过编程将 SVG 转换为 PNG 图像,请参阅以下 C# 代码示例。

只需一行代码即可将 SVG 转换为 PNG

Converter 类的静态方法主要用作将 SVG 文件转换为各种格式的最简单方法。只需一行代码,您就可以在 C# 应用程序中将 SVG 转换为 PNG!

在下面的示例中,我们将本地文件系统中的 SVG 文件( shapes.svg)转换并保存到本地文件系统中。

1// Convert SVG to PNG using C#
2
3// Invoke the ConvertSVG() method for SVG to PNG conversion
4Converter.ConvertSVG(Path.Combine(DataDir, "shapes.svg"), new ImageSaveOptions(), Path.Combine(OutputDir, "convert-with-single-line.png"));

将 SVG 转换为 PNG

使用 ConvertSVG() 方法将文件转换为另一种格式是一系列操作,其中包括文件加载和保存。在下面的示例中,我们通过代码创建一个 SVG 文件。

  1. 为 SVG 文档编写代码
  2. 创建一个新的 ImageSaveOptions 对象。默认情况下,格式属性为 PNG
  3. 使用转换器类的 ConvertSVG(content, baseUri, options, outputPath) 方法将 SVG 保存为 PNG 图像。

请看下面的 C# 代码片段,它显示了使用 Aspose.HTML for .NET 将 SVG 转换为 PNG 的过程。

 1// Convert SVG to PNG in C#
 2
 3// Prepare SVG code
 4string code = "<svg xmlns='http://www.w3.org/2000/svg'>" +
 5              "<circle cx ='100' cy ='100' r ='60' fill='none' stroke='red' stroke-width='10' />" +
 6              "</svg>";
 7
 8// Prepare a path to save the converted file
 9string savePath = Path.Combine(OutputDir, "circle.png");
10
11// Create an instance of the ImageSaveOptions class
12ImageSaveOptions options = new ImageSaveOptions();
13
14// Convert SVG to PNG
15Converter.ConvertSVG(code, ".", options, savePath);

ImageSaveOptions

Aspose.HTML 允许使用默认或自定义保存选项将 SVG 转换为 PNG。使用 ImageSaveOptions 可以自定义渲染过程。您可以指定图像格式、页面大小、页边距、背景颜色等。

PropertyDescription
CompressionSets Tagged Image File Format (TIFF) Compression. By default, this property is LZW.
CSSGets a CssOptions object which is used for configuration of CSS properties processing.
FormatSets the ImageFormat (JPG, PNG, BMP, TIFF, or GIF). By default, this property is PNG.
BackgroundColorThis property sets the color that will fill the background. By default, this property is Transparent.
PageSetupThis property gets a page setup object and uses it for configuration output page-set.
HorizontalResolutionSets horizontal resolution for output images in pixels per inch. The default value is 300 dpi.
VerticalResolutionSets vertical resolution for output images in pixels per inch. The default value is 300 dpi.
UseAntialiasingThis property sets the image rendering quality. Antialiasing is enabled by default.
TextGets a TextOptions object which is used for configuration of text rendering.

使用 ImageSaveOptions 将 SVG 转换为 PNG

要使用指定的 ImageSaveOptions 将 SVG 转换为 PNG,应遵循以下几个步骤:

  1. 使用 SVGDocument 类的一个 SVGDocument() 构造函数加载 SVG 文件。( flower1.svg).
  2. 创建一个新的 ImageSaveOptions 对象并指定保存选项。默认情况下,格式属性为 PNG
  3. 使用 ConvertSVG() 方法将 SVG 保存为 PNG 图像。您需要向 ConvertSVG() 方法传递 SVGDocument、ImageSaveOptions 和输出文件路径,以便将 SVG 转换为 PNG。

下面的 C# 代码片段展示了如何使用自定义保存选项将 SVG 转换为 PNG:

 1// Convert SVG to PNG in C# with custom settings
 2
 3// Prepare a path to a source SVG file
 4string documentPath = Path.Combine(DataDir, "flower1.svg");
 5
 6// Prepare a path to save the converted file
 7string savePath = Path.Combine(OutputDir, "flower-options.png");
 8
 9// Initialize an SVG document from the file
10using SVGDocument document = new SVGDocument(documentPath);
11
12// Create an instance of the ImageSaveOptions class. Set up the SmoothingMode, resolutions, and change the background color to AliceBlue 
13ImageSaveOptions options = new ImageSaveOptions()
14{
15    HorizontalResolution = 200,
16    VerticalResolution = 200,
17    BackgroundColor = System.Drawing.Color.AliceBlue,
18    UseAntialiasing = true,
19};
20
21// Convert SVG to PNG
22Converter.ConvertSVG(document, options, savePath);

ImageSaveOptions() 构造函数初始化 ImageSaveOptions 类的实例,并将其传递给 ConvertSVG() 方法。ConvertSVG() 方法接收 document, options, 输出文件路径 savePath 并执行转换操作。

在上述示例中,我们使用

如果您想提高应用程序中渲染的图形、文本和图像的视觉质量,尤其是对清晰度和平滑边缘要求较高时,请使用 UseAntialiasing = true。启用抗锯齿功能可通过混合边缘周围像素的颜色来平滑锯齿状边缘,从而获得更柔和、更精致的外观。

虽然 UseAntialiasing = true 可以提供更好的视觉质量,但也会增加处理时间。对于优先考虑渲染速度的应用程序,设置 UseAntialiasing = false 可能是最佳选择。

图中展示了 flower-options.png 文件的片段。

文本 ““Flower” PNG 图像”

输出流提供商

如果需要将文件保存在远程存储器(如云、数据库等)中,可以实现 ICreateStreamProvider接口来手动控制文件创建过程。该接口被设计为一个回调对象,用于在文档/页面开始时创建一个流(取决于输出格式),并在渲染文档/页面后释放早期创建的流。

Aspose.HTML for .NET为渲染操作提供了多种输出格式。其中一些格式只生成一个输出文件(例如,PDFXPS),其他格式则生成多个文件(图像格式–JPGPNG等)。

下面的示例展示了如何在应用程序中实现和使用自己的MemoryStreamProvider

 1// Implement a custom MemoryStream provider for advanced control over HTML rendering output streams
 2
 3class MemoryStreamProvider : Aspose.Html.IO.ICreateStreamProvider
 4{
 5    // List of MemoryStream objects created during the document rendering
 6    public List<MemoryStream> Streams { get; } = new List<MemoryStream>();
 7
 8    public Stream GetStream(string name, string extension)
 9    {
10        // This method is called when only one output stream is required, for instance for XPS, PDF or TIFF formats
11        MemoryStream result = new MemoryStream();
12        Streams.Add(result);
13        return result;
14    }
15
16    public Stream GetStream(string name, string extension, int page)
17    {
18        // This method is called when the creation of multiple output streams are required. For instance, during the rendering HTML to list of image files (JPG, PNG, etc.)
19        MemoryStream result = new MemoryStream();
20        Streams.Add(result);
21        return result;
22    }
23
24    public void ReleaseStream(Stream stream)
25    {
26        // Here you can release the stream filled with data and, for instance, flush it to the hard-drive
27    }
28
29    public void Dispose()
30    {
31        // Releasing resources
32        foreach (MemoryStream stream in Streams)
33            stream.Dispose();
34    }
35}

下面的 C# 代码演示了如何使用 MemoryStreamProvider 类和 Aspose.HTML for .NET 库将 SVG 转换为 PNG 并将结果保存到文件中。

 1// Convert SVG to PNG in C# using memory stream
 2
 3// Create an instance of MemoryStreamProvider
 4using MemoryStreamProvider streamProvider = new MemoryStreamProvider();
 5
 6// Prepare SVG code
 7string code = "<svg xmlns='http://www.w3.org/2000/svg'>" +
 8              "<circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red' />" +
 9              "</svg>";
10
11// Convert SVG to PNG using the MemoryStreamProvider
12Converter.ConvertSVG(code, ".", new ImageSaveOptions(), streamProvider);
13
14// Get access to the memory stream that contains the result data
15MemoryStream memory = streamProvider.Streams.First();
16memory.Seek(0, SeekOrigin.Begin);
17
18// Flush the result data to the output file
19using (FileStream fs = File.Create(Path.Combine(OutputDir, "stream-provider.png")))
20{
21    memory.CopyTo(fs);
22}

要了解有关 ImageSaveOptions 的更多信息,请阅读 微调转换器 一文。

使用我们的在线 SVG 到 PNG 转换器 检查 SVG 到 PNG 转换的质量。上传、转换文件并在几秒钟内获得结果。现在就免费试用我们强大的 SVG 到 PNG 转换器!

下载 Aspose.HTML for .NET库,它能让您成功、快速、轻松地将 HTML、MHTML、EPUB、SVG 和 Markdown 文档转换为最流行的格式。

您可以从 GitHub 下载完整的示例和数据文件。

文本 “SVG 到 PNG 转换器”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.