矢量化图像 – Python 代码示例
本文向您介绍使用 Aspose.SVG Python 库矢量化图像的基础知识。本文通过几个 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. 图像矢量化
要使用 Aspose.SVG Python 库对图像进行矢量化,您应该执行以下几个步骤:
- 创建 BezierPathBuilder 类的实例来定义路径构建策略。在这里,您可以设置 BezierPathBuilder 的属性,例如trace_smoother、error_threshold和max_iterations。
- 创建
ImageVectorizer 类的实例。 ImageVectorizer 是用于将图像转换为矢量图形的主要类。
- 将 path_builder 配置(之前定义)分配给 vectorizer 对象。这意味着矢量化器将使用 path_builder 中指定的设置来创建和优化路径。
- 设置 ImageVectorizerConfiguration 类的 colors_limit 和 line_width 属性。
- 使用 vectorize() 方法对指定文件中的图像进行矢量化。
- 使用
SVGDocument
类上的 save 方法将矢量化图像保存为 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 = "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)
此代码示例允许您将彩色光栅图像矢量化为矢量图像。选择矢量化选项以实现图 (b) 所示的所需结果。我们想要原始的简化三色图像。下图演示了源图像 (a) 和使用上述 Python 代码片段的矢量化图像 (b)。
矢量化选项
您可以应用自定义设置以获得图像矢量化的最佳结果。以下是您可以控制的一些主要设置及其默认值:
- 容差 – 容差值确定从轨迹中消除点所允许的最大误差容差。它必须介于 0 和 4 之间。默认值为 0.3。
- trace_smoother – 此属性用于平滑矢量化过程中生成的路径。它可以采用一个参数(severity)来定义所应用的平滑程度。
- 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)
该图演示了源照片 (a)、使用 Python 代码片段的矢量化图像 (b)。
如上所述,SVG 并不是最适合混合颜色等的连续色调图像的格式。矢量化过程使用彩色图像量化。所有小的相同颜色的点或像素,我们用几何形状或曲线替换。您可以通过以下链接找到并查看源照片 (a) 和生成的 SVG 文件 (b) 的详细信息 – 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 创建图像模板。
- 您可以实时尝试 图像矢量化器!该工具提供了各种选项,用于在将位图保存为 SVG 格式之前对其进行预处理。您可以使用与正确矢量化选项链接的控件以交互方式管理矢量化 SVG 文件。
Aspose.SVG 提供免费的在线 I图像矢量化器,旨在将 JPG、PNG、BMP、TIFF 和 GIF 等位图图像转换为矢量图形。转换后,所有矢量图形元素都保存为 SVG 文件。我们的免费矢量化器适用于任何平台。有了这个应用程序,您可以应用各种选项来获得完美的结果。使用我们的免费图像矢量化器节省时间并体验矢量图形的优势!