Vectorización de imágenes – ejemplos de C#

Aspose.SVG ofrece un Vectorizador de imágenes gratuito en línea que se basa en el navegador y funciona en cualquier plataforma. Al utilizar esta aplicación, puede aplicar un conjunto de opciones para obtener el resultado perfecto. ¡Ahorre tiempo y consulte este Vectorizador de imágenes gratuito para obtener todos los beneficios de los gráficos vectoriales!

Texto “Vectorizador de imágenes”

Cómo convertir una imagen rasterizada en un gráfico vectorial

Hay dos tipos de imágenes: vectoriales y de mapa de bits. El tipo que utilice dependerá de la situación. Un mapa de bits es una matriz bidimensional que asigna colores a píxeles en una ubicación particular. Una imagen rasterizada es un archivo mucho más grande que uno vectorial. Los formatos rasterizados son adecuados para fotografías o imágenes con degradados de color. Sin embargo, una de sus principales desventajas es la pérdida de calidad al escalar. Los gráficos vectoriales le permiten escalar imágenes sin perder calidad y, en ocasiones, pueden reducir significativamente su tamaño. Los más adecuados para el formato vectorial son los logotipos, iconos, diseños de página, mapas, gráficos, líneas artísticas e ilustraciones. La vectorización de imágenes es el proceso de convertir una imagen rasterizada en gráficos vectoriales: las curvas, splines y líneas de Bézier.

Este artículo considera algunos ejemplos de C# que demuestran las funcionalidades de ImageVectorization y el efecto de las propiedades de configuración, como TraceSimplifier, TraceSmoother y PathBuilder, en el resultado de la vectorización.

Para la propiedad ColorLimit, hay 25 colores disponibles. Puede elegir la cantidad requerida de colores según la situación. El valor predeterminado es 25. La propiedad ImageSizeLimit establece la 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.

Nota: Aspose.Svg.ImageVectorization Namespace tiene como objetivo implementar tareas de vectorización de imágenes para mapas de bits de origen como JPG, PNG, BMP, TIFF, GIF, etc. La imagen de salida está en formato de archivo vectorial SVG.

Ejemplo 1. Uso de la propiedad TraceSimplifier

El espacio de nombres ImageVectorization incluye un conjunto de clases e interfaces que permiten la implementación del proceso de vectorización de imágenes. Las clases y métodos proporcionados le permiten trabajar con varias opciones para preprocesar imágenes antes de guardarlas en formato vectorial. El procesamiento asume el control de las siguientes opciones de vectorización: TraceSimplifier, TraceSmoother, ColorLimit y LineWidth.

Veamos cómo la propiedad TraceSimplifier afecta la vectorización de imágenes. Primero que nada, debes saber que:

El siguiente fragmento de código demuestra el uso de diferentes valores de la propiedad TraceSimplifier para la conversión de imagen a vector.

 1using System.IO;
 2using Aspose.Svg.ImageVectorization;
 3using Aspose.Svg.Saving;
 4...
 5    // Initialize an instance of the ImageVectorizer class and specify configuration properties
 6    var vectorizer1 = new ImageVectorizer
 7    {
 8        Configuration =
 9        {
10            PathBuilder = new SplinePathBuilder
11            {
12                TraceSimplifier = new ImageTraceSimplifier(0.1f),
13                TraceSmoother = new ImageTraceSmoother(2),
14            },
15            ColorsLimit = 2
16        }
17    };
18
19    var vectorizer2 = new ImageVectorizer
20    {
21        Configuration =
22        {
23            PathBuilder = new SplinePathBuilder
24            {
25                TraceSimplifier = new ImageTraceSimplifier(1),
26                TraceSmoother = new ImageTraceSmoother(2),
27            },
28            ColorsLimit = 2
29        }
30    };
31
32    var vectorizer3 = new ImageVectorizer
33    {
34        Configuration =
35        {
36            PathBuilder = new SplinePathBuilder
37            {
38                TraceSimplifier = new ImageTraceSimplifier(2),
39                TraceSmoother = new ImageTraceSmoother(2),
40            },
41            ColorsLimit = 2
42        }
43    };
44
45    // Prepare path for source image file
46    string sourcePath = Path.Combine(DataDir, "formats.png");
47
48    // Vectorize raster image from the specified file
49    using var document1 = vectorizer1.Vectorize(sourcePath);
50    using var document2 = vectorizer2.Vectorize(sourcePath);
51    using var document3 = vectorizer3.Vectorize(sourcePath);
52
53    // Save the vectorized image as an SVG file
54    document1.Save(Path.Combine(OutputDir, "formats1.svg"));
55    document2.Save(Path.Combine(OutputDir, "formats2.svg"));
56    document3.Save(Path.Combine(OutputDir, "formats3.svg"));

Texto “Imágenes vectorizadas con diferentes valores de la propiedad TraceSimplifier”

Puede descargar los ejemplos completos de C# y los archivos de datos desde GitHub. Encontrará información sobre la descarga desde GitHub y la ejecución de ejemplos en la sección Cómo ejecutar los ejemplos.

Ejemplo 2. Uso de la propiedad TraceSmoother

A veces, los fragmentos de contornos parecen ondas en dientes de sierra. Veamos cómo la propiedad TraceSmoother afecta el suavizado de los contornos. Antes de comenzar, sepa que:

Veamos cómo la propiedad TraceSmoother afecta la vectorización de la imagen:

 1using System.IO;
 2using Aspose.Svg.ImageVectorization;
 3using Aspose.Svg.Saving;
 4...
 5
 6    // Initialize an instance of the ImageVectorizer class
 7    var vectorizer = new ImageVectorizer
 8    {
 9        // Optionally set configuration
10        Configuration =
11        {
12            // Optionally set path builder
13            PathBuilder = new BezierPathBuilder {
14
15            // Optionally set trace smoother
16            TraceSmoother = new ImageTraceSmoother(0),
17            },
18            ColorsLimit = 10,
19            LineWidth = 1
20        }
21    };
22    // Vectorize image from the specified file
23    using var document = vectorizer.Vectorize(Path.Combine(DataDir, "flower.png"));
24
25    // Save the vectorized image as an SVG file
26    document.Save(Path.Combine(OutputDir, "flower.svg"));

Texto “Imágenes vectorizadas con diferentes valores de la propiedad TraceSmoother”

Ejemplo 3. 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:

 1using System.IO;
 2using Aspose.Svg.ImageVectorization;
 3using Aspose.Svg.Saving;
 4...
 5
 6    // Initialize an instance of the ImageVectorizer class
 7    var vectorizer = new ImageVectorizer
 8    {
 9        // Optionally set configuration
10        Configuration =
11        {
12            // Optionally set path builder
13            PathBuilder = new SplinePathBuilder
14            {
15                TraceSmoother = new ImageTraceSmoother(1),
16                TraceSimplifier = new ImageTraceSimplifier(0.3f),
17            },
18            ColorsLimit = 25,
19            LineWidth = 1
20        }
21    };
22    // Vectorize image from the specified file
23    using var document = vectorizer.Vectorize(Path.Combine(DataDir, "horses.jpg"));
24
25    // Save the vectorized image in SVG format
26    document.Save(Path.Combine(OutputDir, "horses-new.svg"));

La figura muestra la foto fuente (a), la imagen vectorizada usando el fragmento de código (b) y la imagen vectorizada mejorada manualmente (c).

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. Como resultado, los bordes de dichos elementos gráficos no encajan perfectamente entre sí; aparecen espacios entre ellos. Esta es la razón de la aparición de puntos y manchas blancas en la imagen vectorizada.

Para solucionar este problema, puede editar manualmente el archivo SVG resultante. Sugerimos cambiar el valor de stroke-width="100" a "150" u otro, según lo desee. ¡Intenta obtener el mejor resultado!

Texto “El fragmento del archivo SVG”

La foto original (a) y el archivo SVG resultante (c) se pueden encontrar y ver en detalle siguiendo los enlaces: horses.jpg, horses.svg.

Limitaciones de licencia

Una versión de evaluación gratuita de Aspose.SVG for .NET proporciona todas las funciones para la vectorización de imágenes excepto las siguientes:

Si quieres probar Aspose.SVG for .NET sin limitaciones de evaluación solicita 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”

El archivo SVG resultante se puede encontrar y ver en detalle siguiendo los enlaces: horses-license.svg.

Puede descargar los ejemplos completos de C# y los archivos de datos desde GitHub. Encontrará información sobre la descarga desde GitHub y la ejecución de ejemplos en la sección Cómo ejecutar los ejemplos.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.