Векторизация изображений – примеры кода Python
Эта статья познакомит вас с основами векторизации изображений с использованием библиотеки Python Aspose.SVG. В статье рассматривается несколько примеров Python, демонстрирующих функциональность ImageVectorization и влияние свойств конфигурации на результат векторизации.
Растровое изображение против векторной графики
Существует два основных типа изображений: векторные и растровые. Выбор между ними зависит от конкретного варианта использования. Растровое изображение, также известное как растровое изображение, представляет собой двумерный массив, сопоставляющий цвета отдельным пикселям. Растровые изображения обычно имеют гораздо больший размер файла, чем векторные изображения, и хорошо подходят для фотографий или изображений с цветовыми градиентами. Однако существенным недостатком растровых изображений является потеря качества при масштабировании, приводящая к пикселизации и размытости.
С другой стороны, векторная графика состоит из геометрических фигур, таких как кривые Безье, сплайны и линии. Эти формы определяются математическими уравнениями, что позволяет бесконечно масштабировать векторные изображения без потери качества. Это делает векторную графику идеальной для логотипов, значков, макетов страниц, карт, графиков, штриховых рисунков и иллюстраций. Они часто приводят к меньшему размеру файлов, чем растровые изображения, особенно для более простых проектов.
Векторизация изображений
Векторизация изображения – это процесс преобразования растрового изображения в векторную графику. Это предполагает преобразование пиксельной информации растрового изображения в серию математических кривых и фигур. Преимущества векторных изображений включают их масштабируемость и, как правило, меньшие размеры файлов для определенных типов изображений. Однако векторные изображения могут оказаться менее эффективными для высокодетализированных изображений или фотографий, требующих сложных цветовых вариаций и градиентов.
Aspose.SVG for Python via .NET предоставляет надежное решение для векторизации изображений через пространство имен
ImageVectorization. Это позволяет пользователям конвертировать различные форматы растровых изображений, такие как JPG, PNG, BMP, TIFF и GIF, в векторный формат файлов SVG. Процесс векторизации можно точно настроить с помощью таких свойств конфигурации, как path_builder
, colors_limit
,error_threshold
,trace_smoother
,max_iterations
, stencil
и т. д., которые влияют на качество и детализацию получаемой векторной графики. Эта технология позволяет точно контролировать процесс векторизации, обеспечивая высокое качество и масштабируемость векторных изображений.
Пример Python 1. Векторизация изображения
Чтобы векторизовать изображение с помощью Python библиотеки Aspose.SVG, вам необходимо выполнить несколько шагов:
- Создайте экземпляр класса
BezierPathBuilder, чтобы определить стратегию построения пути. Здесь вы можете установить свойства
BezierPathBuilder
, такие какtrace_smoother
,error_threshold
иmax_iterations
. - Создайте экземпляр класса
ImageVectorizer.
ImageVectorizer
– это основной класс, используемый для преобразования изображений в векторную графику.- Назначьте конфигурацию
path_builder
(определенную ранее) объекту векторизатора. Это означает, что векторизатор будет использовать настройки, указанные вpath_builder
, для создания и оптимизации пути. - Установите свойства
colors_limit
иline_width
класса ImageVectorizerConfiguration.
- Назначьте конфигурацию
- Используйте метод vectorize() для векторизации изображения из указанного файла.
- Сохраните векторизованное изображение в формате SVG, используя метод
save класса
SVGDocument
.
1import os
2from aspose.svg import *
3from aspose.svg.converters import *
4from aspose.svg.drawing import *
5from aspose.svg.rendering.image import *
6from aspose.svg.imagevectorization import *
7
8# Setup directories
9input_folder = "data/"
10output_folder = "output/"
11src_file = "fish.png"
12output_file = "fish-vectorized.svg"
13if not os.path.exists(output_folder):
14 os.makedirs(output_folder)
15
16# Configuration for vectorization
17path_builder = BezierPathBuilder()
18path_builder.trace_smoother = ImageTraceSmoother(3)
19path_builder.error_threshold = 10.0
20path_builder.max_iterations = 20
21
22vectorizer = ImageVectorizer()
23vectorizer.configuration.path_builder = path_builder
24vectorizer.configuration.colors_limit = 3
25vectorizer.configuration.line_width = 1.5
26
27# Vectorize an image
28with vectorizer.vectorize(os.path.join(input_folder, src_file)) as document:
29 output_file = os.path.join(output_folder, output_file)
30 document.save(output_file)
Этот пример кода позволяет векторизовать цветное растровое изображение в векторное. Варианты векторизации выбраны таким образом, чтобы добиться желаемого результата, показанного на рисунке (б). Нам хотелось получить упрощенное трехцветное изображение оригинала. На следующем рисунке показано исходное изображение (а) и векторизованное изображение с использованием приведенного выше фрагмента кода Python (б).
Параметры векторизации
Вы можете применить собственные настройки, чтобы получить наилучший результат от векторизации изображения. Ниже приведены некоторые основные настройки, которыми вы можете управлять, а также их значения по умолчанию:
- tolerance – значение допуска определяет максимальный допуск на ошибку, допускаемый для точки, которую можно исключить из трассы. Оно должно находиться в диапазоне от 0 до 4. Значение по умолчанию – 0,3.
- trace_smoother – это свойство используется для сглаживания путей, создаваемых в процессе векторизации. Он может принимать параметр («серьезность»), определяющий степень применяемого сглаживания.
- error_threshold – это свойство определяет максимальное отклонение точек от подобранной кривой. По умолчанию это 30.
- max_iterations – определяет количество итераций для метода аппроксимации наименьших квадратов. По умолчанию это 30.
- background_color – значение по умолчанию – прозрачно-белый.
- colors_limit – устанавливает максимальное количество цветов, используемых для квантования изображения. Значение по умолчанию – 25.
- line_width – устанавливает толщину линии. На значение этого параметра влияет масштаб графики. Значение по умолчанию – 1.
- image_size_limit – максимальный размер изображения, определяемый произведением ширины и высоты изображения. Размер изображения будет масштабироваться на основе этого свойства. Значение по умолчанию – 1800000.
Пример Python 2. Векторизация фотографий
Можно ли преобразовать фотографию в векторный формат, чтобы она выглядела идентично фотографии?
SVG не очень подходит для рисования фотореалистичных изображений. Векторные изображения пока не допускают естественных цветовых переходов. Векторная графика лучше всего подходит для создания логотипов, иллюстраций, технических чертежей. Это не самый подходящий формат для изображений с непрерывными тонами и переходами цветов или для редактирования фотографий. Однако векторизация фотографий может привести к впечатляющим художественным эффектам, которые могут быть интересными и полезными.
В этом разделе мы конвертируем фотографию в векторный формат и пытаемся подобрать параметры векторизации так, чтобы результат выглядел идентично фотографии:
1import os
2from aspose.svg import *
3from aspose.svg.converters import *
4from aspose.svg.drawing import *
5from aspose.svg.rendering.image import *
6from aspose.svg.imagevectorization import *
7
8# Setup directories
9input_folder = "data/"
10output_folder = "output/"
11src_file = "lioness.jpg"
12output_file = "lioness.svg"
13if not os.path.exists(output_folder):
14 os.makedirs(output_folder)
15
16# Configuration for vectorization
17path_builder = BezierPathBuilder()
18path_builder.trace_smoother = ImageTraceSmoother(1)
19path_builder.error_threshold = 30.0
20path_builder.max_iterations = 30
21
22vectorizer = ImageVectorizer()
23vectorizer.configuration.path_builder = path_builder
24vectorizer.configuration.colors_limit = 25
25vectorizer.configuration.line_width = 1.5
26
27# Vectorize a photo
28with vectorizer.vectorize(os.path.join(input_folder, src_file)) as document:
29 output_file = os.path.join(output_folder, output_file)
30 document.save(output_file)
На рисунке показано исходное фото (а), векторизованное изображение с использованием фрагмента кода Python (б).
Как упоминалось выше, SVG не является наиболее подходящим форматом для изображений с непрерывными тонами, смешением цветов и т. д. В процессе векторизации используется квантование цветного изображения. Все мелкие одноцветные пятна или пиксели заменяем геометрическими фигурами или кривыми. Исходное фото (а) и полученный SVG-файл (б) вы можете найти и просмотреть подробно, перейдя по ссылкам – lioness.jpg, lioness.svg.
Лицензионные ограничения
Бесплатная ознакомительная версия Aspose.SVG for Python via .NET предоставляет все функции векторизации изображений, за исключением следующих:
- Для квантования изображения будут использоваться только 4 доминирующих цвета.
- Во время сериализации будет сохранено только 50 % узлов документа SVG.
Если вы хотите попробовать Aspose.SVG for Python via .NET без ограничений оценки, запросите 30-дневную временную лицензию. Для получения дополнительной информации обратитесь к статье Как получить временную лицензию?.
На рисунке показан результат преобразования фотографии в вектор без применения лицензии.
Смотрите также
- В статье Векторизация изображения – Рабочий процесс вы найдете описание процесса векторизации изображения – квантование цвета, изменение размера, трассировка контуров и т. д.
- В статье Трафарет изображения – Как создать трафарет на Python объясняется, как создавать трафареты из изображений с помощью Aspose.SVG for Python via .NET API.
- Вы можете попробовать Векторизатор изображений в режиме реального времени! Этот инструмент предлагает различные варианты предварительной обработки растровых изображений перед сохранением их в формате SVG. Вы можете интерактивно управлять векторизованным файлом SVG, используя элементы управления, связанные с соответствующими параметрами векторизации.
Aspose.SVG предлагает бесплатный онлайн Векторизатор изображений, предназначенный для преобразования растровых изображений, таких как JPG, PNG, BMP, TIFF и GIF, в векторную графику. После конвертации все элементы векторной графики сохраняются в виде файлов SVG. Наш бесплатный векторизатор работает на любой платформе. С помощью этого приложения вы сможете применять различные варианты для достижения идеального результата. Экономьте время и испытайте преимущества векторной графики с помощью нашего бесплатного векторизатора изображений!