在 Python 中将 SVG 转换为 PNG

Quick Answer: 要在 Python 中将 SVG 转换为 PNG,请用 SVGDocument 加载源文件,创建 ImageSaveOptions,并将二者传给 Converter.convert_svg()。PNG 是默认图像输出格式,ImageSaveOptions 可控制背景颜色、页面大小、边距和分辨率。

在 Python 中将 SVG 转换为 PNG

PNG 是支持透明度的无损栅格格式。它适合 Web 图形、预览图、缩略图,以及不能直接渲染 SVG 的应用。

下面的示例使用默认 PNG 设置将 document.svg 转换为 result.png

1from aspose.svg import SVGDocument
2from aspose.svg.converters import Converter
3from aspose.svg.saving import ImageSaveOptions
4
5# Convert an SVG file to PNG using the default save options
6options = ImageSaveOptions()
7
8with SVGDocument("document.svg") as document:
9    Converter.convert_svg(document, options, "result.png")

代码执行三个操作:

  1. SVGDocument 加载 SVG 文件,并解析其内容和链接资源。
  2. ImageSaveOptions 选择图像输出,默认格式为 PNG。
  3. Converter.convert_svg() 渲染文档并写入 result.png

使用自定义选项将 SVG 转换为 PNG

当 PNG 需要特定画布、背景或分辨率时使用 ImageSaveOptions。下面的示例转换 winter.svg,添加纯色背景,创建带 10 像素边距的 600 × 550 页面,并以 96 dpi 渲染:

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.saving import ImageSaveOptions
 5from aspose.svg.drawing import Resolution, Page, Size, Margin
 6from aspose.pydrawing import Color
 7
 8# Convert SVG to PNG with a custom background, page, and resolution
 9input_folder = "data/"
10output_folder = "output/"
11input_path = os.path.join(input_folder, "winter.svg")
12output_path = os.path.join(output_folder, "winter.png")
13os.makedirs(output_folder, exist_ok=True)
14
15options = ImageSaveOptions()
16options.background_color = Color.from_argb(231, 217, 230)
17options.page_setup.any_page = Page(Size(600, 550), Margin(10, 10, 10, 10))
18options.horizontal_resolution = Resolution.from_dots_per_inch(96.0)
19options.vertical_resolution = Resolution.from_dots_per_inch(96.0)
20
21with SVGDocument(input_path) as document:
22    Converter.convert_svg(document, options, output_path)

生成的 PNG 使用指定的页面设置,而不是只依赖 SVG viewport。下图比较源 SVG 和在新背景上渲染的 PNG。

原始 SVG 和使用自定义背景转换后的 PNG

重要的 ImageSaveOptions 属性

属性使用场景
background_color用指定颜色填充透明区域
page_setup设置页面尺寸和边距
horizontal_resolution设置水平输出分辨率,单位为 dpi
vertical_resolution设置垂直输出分辨率,单位为 dpi
smoothing_mode控制栅格化质量
text通过 TextOptions 配置文本渲染

如果未设置 background_color,SVG 的透明区域在 PNG 中保持透明。分辨率影响栅格密度,而 page_setup 控制输出画布。以像素指定页面尺寸时,像素尺寸通常比单独提高 dpi 更重要。

常见错误和修复

问题可能原因修复方法
PNG 为空或被裁剪SVG 没有可用 viewport,或输出页面太小定义 SVG 的 widthheightviewBox,或设置 options.page_setup.any_page
透明区域显示不符合预期未指定输出背景需要纯色画布时设置 options.background_color
文本外观不同引用字体不可用安装字体,或在需要精确字形外观时先将文本矢量化
链接图像或 CSS 缺失无法解析相对资源从文件路径加载 SVG,或提供正确的 base URI
输出尺寸不符合预期页面大小和分辨率被当作同一设置page_setup 控制尺寸,用 horizontal_resolution/vertical_resolution 控制 dpi

在线 SVG 转 PNG 转换器

也可以在浏览器中测试 SVG 到 PNG 转换。上传 SVG 文件,选择 PNG,并将结果与程序输出进行比较。

                
            

FAQ

在 Python 中将 SVG 转换为 PNG 的最短方式是什么?

创建 ImageSaveOptions,用 SVGDocument 打开源文件,然后调用 Converter.convert_svg(document, options, output_path)

SVG 转 PNG 会保留透明度吗?

会。PNG 支持透明度,透明 SVG 区域会保持透明,除非设置了 ImageSaveOptions.background_color

如何设置 PNG 尺寸?

PageSizeMargin 设置 ImageSaveOptions.page_setup。需要特定 dpi 时再单独设置分辨率属性。

可以转换存储在字符串中的 SVG 内容吗?

可以。从 SVG 字符串和 base URI 创建 SVGDocument,然后将该文档传给 Converter.convert_svg()

相关文章