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:

  1. 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 y max_iterations.
  2. 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 objeto vectorizer. 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 y line_width de la clase ImageVectorizerConfiguration.
  3. Utilice el método vectorize() para vectorizar una imagen del archivo especificado.
  4. 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.

Texto “Imagen fuente e imagen vectorizada”

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:

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).

Texto “Foto fuente y foto vectorizada”

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:

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.

Texto “Resultado de vectorización de fotos sin uso de licencia”

Ver también

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!

Texto “Vectorizador de imágenes”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.