Векторизация изображений – примеры кода 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, вам необходимо выполнить несколько шагов:

  1. Создайте экземпляр класса BezierPathBuilder, чтобы определить стратегию построения пути. Здесь вы можете установить свойства BezierPathBuilder, такие как trace_smoother, error_threshold и max_iterations.
  2. Создайте экземпляр класса ImageVectorizer. ImageVectorizer – это основной класс, используемый для преобразования изображений в векторную графику.
    • Назначьте конфигурацию path_builder (определенную ранее) объекту векторизатора. Это означает, что векторизатор будет использовать настройки, указанные в path_builder, для создания и оптимизации пути.
    • Установите свойства colors_limit и line_width класса ImageVectorizerConfiguration.
  3. Используйте метод vectorize() для векторизации изображения из указанного файла.
  4. Сохраните векторизованное изображение в формате 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 (б).

Текст «Исходное изображение и векторизованное изображение»

Параметры векторизации

Вы можете применить собственные настройки, чтобы получить наилучший результат от векторизации изображения. Ниже приведены некоторые основные настройки, которыми вы можете управлять, а также их значения по умолчанию:

Пример 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 предоставляет все функции векторизации изображений, за исключением следующих:

Если вы хотите попробовать Aspose.SVG for Python via .NET без ограничений оценки, запросите 30-дневную временную лицензию. Для получения дополнительной информации обратитесь к статье Как получить временную лицензию?.

На рисунке показан результат преобразования фотографии в вектор без применения лицензии.

Текст «Результат векторизации фото без использования лицензии»

Смотрите также

Aspose.SVG предлагает бесплатный онлайн Векторизатор изображений, предназначенный для преобразования растровых изображений, таких как JPG, PNG, BMP, TIFF и GIF, в векторную графику. После конвертации все элементы векторной графики сохраняются в виде файлов SVG. Наш бесплатный векторизатор работает на любой платформе. С помощью этого приложения вы сможете применять различные варианты для достижения идеального результата. Экономьте время и испытайте преимущества векторной графики с помощью нашего бесплатного векторизатора изображений!

Text “Векторизатор изображений”</ а>

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.