Векторизация изображений на C# – преобразование растра в векторную графику

Aspose.SVG предлагает бесплатный онлайн Векторизатор изображений, работающий в браузере на любой платформе. С помощью этого приложения вы можете настроить параметры для получения идеального результата. Сэкономьте время и оцените преимущества векторной графики с помощью этого бесплатного инструмента!

Векторизатор изображений

Преобразование растровых изображений в SVG на C#

Векторизация изображений – это процесс преобразования растровых форматов, таких как PNG, JPG, BMP, GIF или TIFF, в масштабируемую векторную графику SVG. В отличие от растровых изображений, файлы SVG сохраняют качество при любом разрешении, их легче редактировать, оптимизировать и масштабировать для веб-дизайна, печати, CAD и графического дизайна.

С помощью Aspose.SVG for .NET вы можете программно векторизовать растровые изображения на C# без использования стороннего графического ПО или браузерных инструментов. API предоставляет гибкие настройки, позволяющие контролировать сглаживание путей, упрощение кривых, уменьшение количества цветов и сложность выходного SVG.

В этой статье показано, как:

Примечание: Пространство имен Aspose.Svg.ImageVectorization поддерживает работу с распространенными форматами (JPG, PNG, BMP, TIFF, GIF) и всегда создает файл SVG.

Преобразование PNG в SVG с использованием TraceSimplifier

API векторизации Aspose.SVG предоставляет классы и методы для предварительной обработки изображений перед сохранением. Процесс векторизации позволяет управлять такими параметрами, как TraceSimplifier, TraceSmoother, ColorsLimit и LineWidth.

Давайте рассмотрим, как свойство TraceSimplifier влияет на результат. Прежде всего, важно знать следующее:

Следующий фрагмент кода демонстрирует использование различных значений свойства tolerance (TraceSimplifier) для преобразования изображения в вектор:

1using System.IO;
2using Aspose.Svg.ImageVectorization;
3using Aspose.Svg.Saving;
 1// Compare different SplinePathBuilder configurations for image vectorization with varying simplification levels
 2
 3// Initialize an instance of the ImageVectorizer class and specify configuration properties
 4ImageVectorizer vectorizer1 = new ImageVectorizer
 5{
 6    Configuration =
 7    {
 8        PathBuilder = new SplinePathBuilder
 9        {
10            TraceSimplifier = new ImageTraceSimplifier(0.1f),
11            TraceSmoother =   new ImageTraceSmoother(2),
12        },
13        ColorsLimit = 2
14    }
15};
16
17ImageVectorizer vectorizer2 = new ImageVectorizer
18{
19    Configuration =
20    {
21        PathBuilder = new SplinePathBuilder
22        {
23            TraceSimplifier = new ImageTraceSimplifier(1),
24            TraceSmoother =   new ImageTraceSmoother(2),
25        },
26        ColorsLimit = 2
27    }
28};
29
30ImageVectorizer vectorizer3 = new ImageVectorizer
31{
32    Configuration =
33    {
34        PathBuilder = new SplinePathBuilder
35        {
36            TraceSimplifier = new ImageTraceSimplifier(2),
37            TraceSmoother =   new ImageTraceSmoother(2),
38        },
39        ColorsLimit = 2
40    }
41};
42
43// Prepare a path for a source image file
44string sourcePath = Path.Combine(DataDir, "formats.png");
45
46// Vectorize raster image from the specified file
47using SVGDocument document1 = vectorizer1.Vectorize(sourcePath);
48using SVGDocument document2 = vectorizer2.Vectorize(sourcePath);
49using SVGDocument document3 = vectorizer3.Vectorize(sourcePath);
50
51// Save the vectorized image as an SVG file
52document1.Save(Path.Combine(OutputDir, "formats1.svg"));
53document2.Save(Path.Combine(OutputDir, "formats2.svg"));
54document3.Save(Path.Combine(OutputDir, "formats3.svg"));

Векторизованные изображения с разными значениями свойства TraceSimplifier

Сглаживание векторных путей с помощью TraceSmoother

Иногда фрагменты контуров выглядят зубчатыми или напоминают пилообразные волны. Давайте посмотрим, как свойство TraceSmoother влияет на сглаживание:

Посмотрим, как TraceSmoother влияет на результат:

1using System.IO;
2using Aspose.Svg.ImageVectorization;
3using Aspose.Svg.Saving;
 1// Vectorize PNG to SVG using ImageVectorizer and custom parameters
 2
 3// Initialize an instance of the ImageVectorizer class
 4ImageVectorizer vectorizer = new ImageVectorizer
 5{
 6    // Optionally set a configuration
 7    Configuration =
 8    {
 9        // Optionally create an instance of the PathBuilder class
10        PathBuilder = new BezierPathBuilder {
11        // Optionally set trace smoother
12        TraceSmoother = new ImageTraceSmoother(0),
13            ErrorThreshold =  30,
14            MaxIterations = 30
15        },
16        ColorsLimit = 10,
17        LineWidth = 1
18    }
19};
20// Vectorize image from the specified file
21using SVGDocument document = vectorizer.Vectorize(Path.Combine(DataDir, "flower.png"));
22
23// Save vectorized Image as an SVG file 
24document.Save(Path.Combine(OutputDir, "flower.svg"));

Векторизованные изображения с разными значениями свойства TraceSmoother

Векторизация фотографий на C#

Можно ли преобразовать фотографию в векторный формат так, чтобы она выглядела идентично оригиналу?

Формат SVG не предназначен для фотореалистичных изображений, так как он пока не поддерживает идеально естественные цветовые переходы. Векторная графика лучше всего подходит для логотипов, иконок и технических чертежей. Однако векторизация фотографий может создавать интересные художественные эффекты.

В этом разделе мы попробуем подобрать параметры векторизации так, чтобы результат был максимально приближен к фото:

1using System.IO;
2using Aspose.Svg.ImageVectorization;
3using Aspose.Svg.Saving;
 1// Convert JPG to SVG in C#
 2
 3// Initialize an instance of the ImageVectorizer class
 4ImageVectorizer vectorizer = new ImageVectorizer
 5{
 6    // Optionally set a configuration
 7    Configuration =
 8    {
 9        // Optionally create an instance of the PathBuilder class
10        PathBuilder = new SplinePathBuilder
11        {
12            TraceSmoother = new ImageTraceSmoother(1),
13            TraceSimplifier = new ImageTraceSimplifier(0.3f)
14        },
15        ColorsLimit = 25,
16        LineWidth = 1
17    }
18};
19
20// Vectorize image from a specified file
21using (SVGDocument document = vectorizer.Vectorize(Path.Combine(DataDir, "horses.jpg")))
22{
23    // Save the vectorized image as SVG
24    document.Save(Path.Combine(OutputDir, "horses-new.svg"));
25}

На рисунке показаны: исходное фото (a), векторизованное изображение с использованием кода выше (b) и улучшенная вручную версия (c).

Исходное и векторизованное фото

В процессе векторизации используется квантование цветов. Мелкие области заменяются геометрическими фигурами, из-за чего между ними могут появляться крошечные зазоры. Это причина появления белых точек на изображении.

Совет: Чтобы исправить эту проблему, вы можете вручную отредактировать полученный SVG-файл. Мы рекомендуем изменить значение stroke-width="100" на "150" или другое подходящее.

Фрагмент SVG-файла

Исходное фото (a) и итоговый SVG (c) можно изучить детально по ссылкам: horses.jpg, horses.svg.

Параметры конфигурации векторизации изображений

Aspose.SVG for .NET предоставляет множество опций для контроля качества SVG, гладкости путей и сложности вывода.

ОпцияОписаниеРекомендации
ColorsLimitМаксимальное количество цветов при квантовании. Низкие значения упрощают структуру, высокие – сохраняют детали.Для логотипов – низкие значения; для иллюстраций и фото – высокие.
ImageSizeLimitМаксимальный размер изображения (ширина × высота). Большие изображения могут масштабироваться перед обработкой.Увеличьте для исходников высокого разрешения.
PathBuilderАлгоритм генерации путей SVG. Влияет на плавность кривых.Используйте SplinePathBuilder или BezierPathBuilder для гладких линий.
TraceSimplifierУменьшает количество точек и упрощает геометрию путей.Помогает уменьшить размер файла и оптимизировать сложность.
TraceSmootherСглаживает фрагменты контуров и убирает зазубрины.Рекомендуется для шумных или низкокачественных растровых исходников.
LineWidthТолщина генерируемых векторных штрихов.Увеличьте, если тонкие контуры исчезают при векторизации.

Лицензионные ограничения

Бесплатная ознакомительная версия Aspose.SVG предоставляет все функции векторизации, кроме следующих:

Чтобы протестировать API без ограничений, запросите 30-дневную временную лицензию.

Результат векторизации без лицензии

Итоговый файл: horses-license.svg.

Распространенные проблемы векторизации и их решение

ПроблемаВозможная причинаРекомендуемое решение
В SVG много зазоров или разрозненных фигурСлишком низкий ColorsLimit.Увеличьте ColorsLimit (например, до 30–40) или немного увеличьте stroke-width.
Слишком большой размер SVG-файлаСлишком низкий допуск TraceSimplifier.Увеличьте значение допуска (обычно 0.7–1.0) для уменьшения количества точек.
Края выглядят грубыми или зубчатымиTraceSmoother отключен или настроен слишком слабо.Примените значения сглаживания в диапазоне 5–10.
В итоговом SVG отсутствуют некоторые цветаОценочная версия ограничивает количество обрабатываемых доминирующих цветов.Примените временную или полную лицензию Aspose.SVG, чтобы включить поддержку полноцветной векторизации.
SVG содержит слишком много лишних путейИсходное изображение содержит шум, градиенты или артефакты сжатия.Предварительно обработайте изображение перед векторизацией: уменьшите шум, увеличьте контрастность или используйте более простые исходные изображения.
Векторизация фотографий дает неточный результатТрассировка растра в вектор лучше всего подходит для логотипов, иконок и иллюстраций, а не для детальных фотографий.Уменьшите количество цветов, увеличьте сглаживание или используйте стилизованные изображения вместо фотореалистичных.
Исчезают тонкие линииСлишком агрессивное упрощение.Уменьшите допуск упрощения и увеличьте ColorsLimit.

FAQ

1. Как конвертировать PNG в SVG на C#?
Используйте класс ImageVectorizer в Aspose.SVG for .NET. Он поддерживает гибкие настройки сглаживания, упрощения и квантования цветов.

2. В чем разница между растровыми и векторными изображениями?
Растр состоит из пикселей и теряет качество при масштабировании. Вектор использует математические пути, что позволяет масштабировать его бесконечно без потери четкости.

3. Как уменьшить размер SVG после векторизации?
Увеличьте допуск в TraceSimplifier, уменьшите количество цветов (ColorsLimit) и используйте настройки сглаживания путей.

4. Какие изображения лучше всего подходят для векторизации?
Логотипы, иконки и контурные рисунки с четкими краями и ограниченным набором цветов.

5. Можно ли настроить процесс векторизации?
Да, API позволяет детально настраивать лимиты цветов, размеры, типы построителей путей и параметры сглаживания.

Дополнительные ресурсы

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.