在 Python 中将 SVG 转换为图像

Quick Answer: 使用 SVGDocument 加载 SVG 文件,创建 ImageSaveOptions,设置图像 format,然后调用 Converter.convert_svg(document, options, output_path)。使用 ImageSaveOptions 控制背景颜色、页面大小、边距和输出分辨率。

Python 中的 SVG 到图像转换

Aspose.SVG for Python via .NET 可将 SVG 文档转换为 JPG、BMP、TIFF、GIF 和 PNG 等栅格图像格式。不需要透明度时使用 JPG,透明栅格输出使用 PNG,发布和图像处理工作流使用 TIFF,简单位图输出使用 BMP,轻量栅格输出使用 GIF。

针对具体格式的教程,请参见 在 Python 中将 SVG 转换为 PNG在 Python 中将 SVG 转换为 JPG。本文关注更通用的 SVG 到图像工作流和格式选择。

运行示例前,请在 Python 环境中 安装 Aspose.SVG for Python via .NET

示例:使用 Converter.convert_svg() 将 SVG 转换为 JPG

下面的示例使用 SVGDocumentImageSaveOptionsConverter.convert_svg() 将 SVG 文件转换为 JPG,并设置自定义背景、页面大小、边距和分辨率。JPG 不支持透明度,因此通常需要设置背景颜色。

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.drawing import Margin, Page, Resolution, Size
 5from aspose.svg.rendering.image import ImageFormat
 6from aspose.svg.saving import ImageSaveOptions
 7from aspose.pydrawing import Color
 8
 9# Convert SVG to JPG with custom background, page size, and resolution
10input_folder = "data/"
11output_folder = "output/"
12input_path = os.path.join(input_folder, "christmas-tree.svg")
13output_path = os.path.join(output_folder, "christmas-tree.jpg")
14os.makedirs(output_folder, exist_ok=True)
15
16options = ImageSaveOptions()
17options.format = ImageFormat.JPEG
18options.background_color = Color.from_argb(233, 255, 241)
19options.page_setup.any_page = Page(Size(450, 450), Margin(20, 20, 20, 20))
20options.horizontal_resolution = Resolution.from_dots_per_inch(96.0)
21options.vertical_resolution = Resolution.from_dots_per_inch(96.0)
22
23with SVGDocument(input_path) as document:
24    Converter.convert_svg(document, options, output_path)

下图显示源 SVG 和带自定义背景色的 JPG 转换结果。

原始 SVG 图像和使用自定义背景转换后的 JPG 图像

更改输出图像格式

要将 SVG 保存为其他图像格式,请设置 ImageSaveOptions.format 并使用匹配的文件扩展名。例如,可使用 ImageFormat 值,例如 ImageFormat.GIF 搭配 .gifImageFormat.BMP 搭配 .bmp,或 ImageFormat.TIFF 搭配 .tiff

1options.format = ImageFormat.GIF
2output_path = os.path.join(output_folder, "image.gif")

常用 ImageSaveOptions 属性

属性控制内容
formatJPG、PNG、BMP、TIFF 或 GIF 等目标图像格式
background_color透明 SVG 区域的背景颜色
page_setup输出图像尺寸、边距和页面布局
horizontal_resolution水平输出分辨率,单位为每英寸像素
vertical_resolution垂直输出分辨率,单位为每英寸像素
smoothing_mode形状和边缘的渲染质量
compressionTIFF 压缩设置

ImageSaveOptionsImageRenderingOptions 继承图像渲染设置,因此转换器工作流和设备工作流共享许多输出属性。

使用 render_to() 将 SVG 转换为图像

render_to() 方法将 SVG 内容发送到 ImageDevice。当应用已经使用渲染设备,或需要明确选择目标设备时,此模式很有用。

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.drawing import Margin, Page, Resolution, Size
 4from aspose.svg.rendering.image import ImageDevice, ImageFormat, ImageRenderingOptions
 5
 6# Render SVG to JPG through an ImageDevice
 7input_folder = "data/"
 8output_folder = "output/"
 9input_path = os.path.join(input_folder, "image.svg")
10output_path = os.path.join(output_folder, "image.jpg")
11os.makedirs(output_folder, exist_ok=True)
12
13options = ImageRenderingOptions()
14options.format = ImageFormat.JPEG
15options.horizontal_resolution = Resolution.from_dots_per_inch(96.0)
16options.vertical_resolution = Resolution.from_dots_per_inch(96.0)
17options.page_setup.any_page = Page(Size(600, 600), Margin(10, 10, 10, 10))
18
19with SVGDocument(input_path) as document:
20    with ImageDevice(options, output_path) as device:
21        document.render_to(device)

常见错误和修复

问题可能原因修复方法
JPG 输出有黑色或意外背景JPG 不支持透明度转换前设置 options.background_color
输出图像被裁剪或过大页面设置与 SVG viewport 或所需输出尺寸不匹配使用 PageSizeMargin 配置 page_setup.any_page
图像模糊输出分辨率或页面大小太低提高 horizontal_resolutionvertical_resolution 或输出尺寸
生成了错误格式图像格式和文件扩展名不匹配明确设置 options.format 和输出文件扩展名
外部图像或 CSS 缺失转换期间无法解析相对资源将资源保留在 SVG 文件旁边,或使用正确的绝对路径

在线 SVG 转图像转换器

使用免费的在线 SVG to JPG Converter 或通用 SVG Converter 在 Python 实现前测试 SVG 到图像转换。

                
            

在线 SVG 转 JPG 转换器

FAQ

如何在 Python 中将 SVG 转换为 JPG?

使用 SVGDocument 加载 SVG,将 ImageSaveOptions.format 设置为 ImageFormat.JPEG,然后调用 Converter.convert_svg(document, options, output_path)

可以用同一段代码将 SVG 转换为 BMP、TIFF 或 GIF 吗?

可以。将 options.format 改为所需的 ImageFormat 值,并使用匹配的输出文件扩展名。

为什么应为 JPG 输出设置背景颜色?

JPG 不支持透明度。背景颜色可以让转换后图像中的透明 SVG 区域结果可预测。

可以控制输出图像尺寸吗?

可以。使用 PageSizeMargin 配置 options.page_setup.any_page,并在需要时设置分辨率。

应该使用 Converter.convert_svg() 还是 render_to()?

普通文件转换使用 Converter.convert_svg()。需要 ImageDevice 渲染设备工作流时使用 render_to()

相关文章