Vectorización de imágenes – ejemplos de código Python
Este artículo le presenta los conceptos básicos de la vectorización de imágenes utilizando la biblioteca Aspose.SVG Python. El artículo recorre varios ejemplos de Python que demuestran la funcionalidad de ImageVectorization y el impacto de las propiedades de configuración en el resultado de la vectorización.
Imagen rasterizada frente a gráfico vectorial
Hay dos tipos principales de imágenes: vectoriales y rasterizadas. La elección entre ellos depende del caso de uso específico. Un mapa de bits, también conocido como imagen rasterizada, es una matriz bidimensional que asigna colores a píxeles individuales. Las imágenes rasterizadas suelen tener tamaños de archivo mucho más grandes que las imágenes vectoriales y funcionan bien para fotografías o imágenes con degradados de color. Sin embargo, una desventaja importante de las imágenes rasterizadas es la pérdida de calidad al escalarlas, lo que provoca pixelación y borrosidad.
Los gráficos vectoriales, por otro lado, consisten en formas geométricas como curvas, splines y líneas de Bézier. Estas formas están determinadas por ecuaciones matemáticas, lo que permite escalar infinitamente las imágenes vectoriales sin perder calidad. Esto hace que los gráficos vectoriales sean ideales para logotipos, íconos, diseños de páginas, mapas, gráficos, arte lineal e ilustraciones. A menudo dan como resultado archivos de menor tamaño que las imágenes rasterizadas, especialmente para proyectos más simples.
Vectorizar imágenes
La vectorización de imágenes es el proceso de convertir una imagen rasterizada en gráficos vectoriales. Esto implica convertir la información de píxeles de una imagen rasterizada en una serie de curvas y formas matemáticas. Los beneficios de las imágenes vectoriales incluyen su escalabilidad y tamaños de archivo típicamente más pequeños para ciertos tipos de imágenes. Sin embargo, las imágenes vectoriales pueden ser menos efectivas para imágenes o fotografías muy detalladas que requieren variaciones de color y degradados complejos.
Aspose.SVG for Python via .NET proporciona una solución sólida para vectorizar imágenes a través del espacio de nombres ImageVectorization. Esto permite a los usuarios convertir varios formatos de imágenes rasterizadas, como JPG, PNG, BMP, TIFF y GIF, al formato de archivo vectorial SVG. El proceso de vectorización se puede ajustar utilizando propiedades de configuración como path_builder, colors_limit, error_threshold, trace_smoother, max_iterations, stencil, etc., que afectan la calidad y el detalle de los gráficos vectoriales resultantes. Esta tecnología permite un control preciso del proceso de vectorización, asegurando una alta calidad y escalabilidad de las imágenes vectoriales.
Ejemplo 1 de Python. Vectorización de imágenes
Para vectorizar una imagen con la biblioteca Aspose.SVG Python, debes seguir algunos pasos:
- Cree una instancia de la clase
BezierPathBuilder para definir la estrategia de creación de rutas. Aquí puede configurar las propiedades de BezierPathBuilder, como
trace_smoother
,error_threshold
ymax_iterations
. - Cree una instancia de la clase
ImageVectorizer. ImageVectorizer es la clase principal utilizada para convertir imágenes en gráficos vectoriales.
- Asigne la configuración
path_builder
(definida anteriormente) al objetovectorizer
. Esto significa que el vectorizador utilizará la configuración especificada en path_builder para la creación y optimización de rutas. - Establezca las propiedades
colors_limit
yline_width
de la clase ImageVectorizerConfiguration.
- Asigne la configuración
- Utilice el método vectorize() para vectorizar una imagen del archivo especificado.
- Guarde la imagen vectorizada como un archivo SVG usando el método
save en la clase
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)
Este ejemplo de código le permite vectorizar una imagen rasterizada en color en una vectorial. Las opciones de vectorización se seleccionan de tal manera que se logre el resultado deseado que se muestra en la figura (b). Queríamos una imagen simplificada de tres colores del original. La siguiente figura muestra la imagen fuente (a) y la imagen vectorizada usando el fragmento de código Python (b) anterior.
Opciones de vectorización
Puede aplicar configuraciones personalizadas para obtener el mejor resultado de la vectorización de la imagen. A continuación se muestran algunas de las configuraciones principales que puede controlar, junto con sus valores predeterminados:
- tolerance – El valor de la tolerancia determina la tolerancia máxima de error permitida para que un punto sea eliminado de la traza. Debe estar entre 0 y 4. El valor predeterminado es 0,3.
- trace_smoother – Esta propiedad se utiliza para suavizar los caminos generados durante el proceso de vectorización. Puede tomar un parámetro (
severity
) que define el grado de suavizado aplicado. - error_threshold: esta propiedad define la desviación máxima de los puntos con respecto a la curva ajustada. Por defecto, es 30.
- max_iterations – define un número de iteraciones para el método de aproximación de mínimos cuadrados. Por defecto, es 30.
- background_color: el valor predeterminado es blanco transparente.
- colors_limit: establece el número máximo de colores utilizados para cuantificar una imagen. El valor predeterminado es 25.
- line_width – establece el ancho de la línea. El valor de este parámetro se ve afectado por la escala de gráficos. El valor predeterminado es 1.
- image_size_limit – dimensión máxima de una imagen determinada por la multiplicación del ancho y alto de la imagen. El tamaño de la imagen se escalará según esta propiedad. El valor predeterminado es 1800000.
Ejemplo 2 de Python. Vectorización de fotografías
¿Es posible convertir una foto en formato vectorial para que parezca idéntica a la foto?
SVG no es muy adecuado para dibujar imágenes fotorrealistas. Las imágenes vectoriales todavía no permiten transiciones de color naturales. Los gráficos vectoriales son los mejores para crear logotipos, ilustraciones y dibujos técnicos. No es el formato más adecuado para imágenes de tonos continuos con mezclas de color o para editar fotografías. Sin embargo, vectorizar fotografías puede dar como resultado efectos artísticos impresionantes que pueden resultar interesantes y útiles.
En esta sección, convertimos una foto a formato vectorial e intentamos elegir opciones de vectorización para que el resultado parezca idéntico a la foto:
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)
La figura muestra la foto fuente (a), la imagen vectorizada usando el fragmento de código Python (b).
Como se mencionó anteriormente, SVG no es el formato más adecuado para imágenes de tonos continuos con combinaciones de colores, etc. El proceso de vectorización utiliza la cuantificación de imágenes en color. Todos los pequeños puntos o píxeles del mismo color los reemplazamos por formas geométricas o curvas. La foto original (a) y el archivo SVG resultante (b) se pueden encontrar y ver en detalle siguiendo los enlaces: lioness.jpg, lioness.svg.
Limitaciones de licencia
Una versión de evaluación gratuita de Aspose.SVG for Python via .NET proporciona todas las funciones para la vectorización de imágenes excepto las siguientes:
- Sólo se utilizarán 4 colores dominantes para cuantizar una imagen.
- Sólo el 50% de los nodos del documento SVG se guardarán durante la serialización.
Si desea probar Aspose.SVG for Python via .NET sin limitaciones de evaluación solicite una licencia temporal de 30 días. Para obtener más información, consulte ¿Cómo obtener una licencia temporal?
La figura muestra el resultado de la conversión de foto a vector sin aplicar una licencia.
Ver también
- En el artículo Vectorización de imágenes – Flujo de trabajo, encontrará una descripción del proceso de vectorización de imágenes: cuantificación de color, cambio de tamaño, trazado de contornos, etc.
- El artículo Image Stencil – Cómo hacer una plantilla en Python explica cómo crear plantillas a partir de imágenes usando Aspose.SVG for Python via .NET API.
- ¡Puedes probar Vectorizador de imágenes en línea en tiempo real! Esta herramienta ofrece varias opciones para preprocesar mapas de bits antes de guardarlos en formato SVG. Puede administrar de forma interactiva el archivo SVG vectorizado utilizando controles vinculados con las opciones de vectorización adecuadas.
Aspose.SVG ofrece un Vectorizador de imágenes gratuito en línea que está diseñado para convertir imágenes de mapa de bits como JPG, PNG, BMP, TIFF y GIF en gráficos vectoriales. Después de la conversión, todos los elementos gráficos vectoriales se guardan como archivos SVG. Nuestro vectorizador gratuito funciona en cualquier plataforma. Con esta aplicación, puedes aplicar varias opciones para lograr el resultado perfecto. ¡Ahorre tiempo y experimente las ventajas de los gráficos vectoriales con nuestro Vectorizador de imágenes gratuito!