Конвертировать SVG в изображение в Python

Quick Answer: Загрузите SVG через SVGDocument, создайте ImageSaveOptions, задайте формат изображения и вызовите Converter.convert_svg(document, options, output_path). Используйте ImageSaveOptions, чтобы управлять цветом фона, размером страницы, полями и разрешением.

Конвертация SVG в изображение в Python

Aspose.SVG for Python via .NET может конвертировать SVG-документы в растровые форматы, такие как JPG, BMP, TIFF, GIF и PNG. Используйте JPG, когда прозрачность не нужна, PNG – для прозрачного растрового вывода, TIFF – для издательских задач и обработки изображений, BMP – для простого растрового вывода, GIF – для легковесного растрового вывода.

Для отдельных руководств см. Конвертировать SVG в PNG в Python и Конвертировать SVG в JPG в Python. Эта статья фокусируется на общем сценарии SVG-to-image и выборе формата.

Перед запуском примеров установите Aspose.SVG for Python via .NET в вашей Python-среде.

Пример: конвертация SVG в JPG с помощью Converter.convert_svg()

Следующий пример использует SVGDocument, ImageSaveOptions и Converter.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 с .gif, ImageFormat.BMP с .bmp или ImageFormat.TIFF с .tiff.

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

Основные свойства ImageSaveOptions

СвойствоЧто контролирует
formatЦелевой формат изображения: JPG, PNG, BMP, TIFF или GIF
background_colorЦвет фона для прозрачных областей SVG
page_setupРазмер выходного изображения, поля и layout страницы
horizontal_resolutionГоризонтальное разрешение вывода в пикселях на дюйм
vertical_resolutionВертикальное разрешение вывода в пикселях на дюйм
smoothing_modeКачество рендеринга фигур и краев
compressionНастройки сжатия TIFF

ImageSaveOptions наследует настройки рендеринга изображений от ImageRenderingOptions, поэтому многие свойства совпадают для сценариев через converter и через устройство рендеринга.

Конвертация SVG в изображение с помощью render_to()

Метод 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 перед конвертацией
Выходное изображение обрезано или слишком большоеНастройка страницы не соответствует viewport SVG или желаемому размеру выводаНастройте page_setup.any_page с помощью Page, Size и Margin
Изображение размытоРазрешение или размер страницы слишком малыУвеличьте horizontal_resolution, vertical_resolution или размеры вывода
Создан не тот форматФормат изображения и расширение файла не совпадаютЗадавайте и options.format, и расширение выходного файла осознанно
Внешние изображения или CSS отсутствуютОтносительные ресурсы не могут быть разрешены при конвертацииДержите ресурсы рядом с SVG-файлом или используйте корректные абсолютные пути

Онлайн-конвертер SVG в изображение

Используйте бесплатный онлайн SVG to JPG Converter или общий SVG Converter, чтобы проверить SVG-to-image конвертацию перед реализацией в Python.

                
            

Онлайн-конвертер SVG в JPG

FAQ

Как конвертировать SVG в JPG в Python?

Загрузите SVG через SVGDocument, задайте ImageSaveOptions.format = ImageFormat.JPEG и вызовите Converter.convert_svg(document, options, output_path).

Можно ли конвертировать SVG в BMP, TIFF или GIF тем же кодом?

Да. Измените options.format на нужное значение ImageFormat и используйте соответствующее расширение выходного файла.

Почему для JPG-вывода нужно задавать цвет фона?

JPG не поддерживает прозрачность. Цвет фона делает прозрачные области SVG предсказуемыми в конвертированном изображении.

Можно ли управлять размером выходного изображения?

Да. Настройте options.page_setup.any_page с помощью Page, Size и Margin, а при необходимости задайте разрешение.

Что выбрать: Converter.convert_svg() или render_to()?

Используйте Converter.convert_svg() для обычной конвертации файлов. Используйте render_to(), когда нужен сценарий с устройством рендеринга, например ImageDevice.

Связанные статьи