Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
En este artículo, aprenderá sobre los principales filtros de color: <feColorMatrix> y <feComponentTransfer>. Aquí encontrará ejemplos que muestran cómo escribir código SVG para crear efectos de saturación, hueRotate y luminanceToAlpha, así como ejemplos detallados de C# sobre el uso del espacio de nombres
Aspose.Svg.Filters para aplicar filtros de color a elementos SVG o mapas de bits.
Aspose.SVG for .NET le permite crear varios efectos de filtro SVG que son compatibles con casi todos los navegadores modernos. Cuando se trata de manejo del color, <feColorMatrix> es la mejor opción. Es un tipo de filtro de color que utiliza una matriz para afectar los valores de color de cada canal RGBA. <feComponentTransfer> es una de las primitivas de filtro SVG más potentes. Da control sobre los canales RGBA individuales de la imagen, lo que le permite crear efectos SVG similares a Photoshop; por ejemplo, se puede utilizar para posterizar imágenes.
<feColorMatrix><feColorMatrix> es uno de los principales filtros de color. Esta primitiva de filtro aplica una transformación matricial a los canales RGBA de cada píxel en la imagen de entrada. Como resultado, se produce un nuevo conjunto de valores de color y alfa. En el caso común, la matriz de color se escribe como una operación del atributo type del elemento <feColorMatrix>. En los casos especiales de matrices de color, se utilizan las operaciones auxiliares del type: saturate, hueRotate, luminanceToAlpha.
El efecto de saturación es un caso especial del uso de la matriz de color. Veamos ejemplos de la operación saturate utilizada en el atributo type de la primitiva de filtro <feColorMatrix>:
1<svg xmlns="http://www.w3.org/2000/svg">
2 <image filter="url(#saturation-effect)" href="http://docs.aspose.com/svg/net/images/api/lighthouse.jpg" x="20" y="20" height="440" width="330" />
3 <defs>
4 <filter id="saturation-effect">
5 <feColorMatrix in="SourceGraphic" type="saturate" values="2"></feColorMatrix>
6 </filter>
7 </defs>
8</svg>El código SVG anterior ilustra la creación del efecto de saturación y le recuerda que en SVG, un filtro se define mediante un elemento <filter> que se establece dentro de un elemento <defs>. Nunca se representa y se describe conceptualmente como un elemento que incluye sus elementos secundarios, las primitivas de filtro.
El siguiente código C# crea un archivo SVG con una imagen con mayor saturación, lo que hace que los colores parezcan más vibrantes. El efecto de saturación se logra mediante la primitiva de filtro <feColorMatrix> con los valores especificados en el código.
1using Aspose.Svg;
2using System.IO;
3using Aspose.Svg.Filters;
4using Aspose.Svg.DataTypes; 1// Apply saturation filter to an <image> element in SVG programmatically
2
3// Set SVG Namespace Url
4string SvgNamespace = "http://www.w3.org/2000/svg";
5
6// Initialize an SVG document
7using (SVGDocument document = new SVGDocument())
8{
9 SVGSVGElement svgElement = document.RootElement;
10
11 // Create an <image> element and add it to the <svg> element
12 SVGImageElement imageElement = (SVGImageElement)document.CreateElementNS(SvgNamespace, "image");
13 imageElement.Href.BaseVal = "http://docs.aspose.com/svg/images/api/lighthouse.jpg";
14 imageElement.Height.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
15 imageElement.Width.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
16 imageElement.Height.BaseVal.Value = 440;
17 imageElement.Width.BaseVal.Value = 330;
18 imageElement.X.BaseVal.Value = 20;
19 imageElement.Y.BaseVal.Value = 20;
20 imageElement.SetAttribute("filter", "url(#saturation)");
21 svgElement.AppendChild(imageElement);
22
23 // Create a <defs> element and add it to the <svg> element
24 SVGDefsElement defsElement = (SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
25 svgElement.AppendChild(defsElement);
26
27 // Create a <filter> element and add it to the <defs> element
28 SVGFilterElement filterElement = (SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
29 filterElement.Id = "saturation";
30 defsElement.AppendChild(filterElement);
31
32 // Create a <feColorMatrix> element and add it to the <filter> element
33 SVGFEColorMatrixElement feColorMatrixElement = (SVGFEColorMatrixElement)document.CreateElementNS(SvgNamespace, "feColorMatrix");
34 feColorMatrixElement.In1.BaseVal = "SourceGraphic";
35 feColorMatrixElement.SetAttribute("type", "saturate");
36 feColorMatrixElement.SetAttribute("values", "2");
37 filterElement.AppendChild(feColorMatrixElement);
38
39 // Save the document
40 document.Save(Path.Combine(OutputDir, "saturation-effect.svg"));
41}Consideremos el código paso a paso:
RootElement de la clase SVGDocument apunta al elemento raíz <svg> del documento.<image> con atributos y agréguelo al elemento <svg>:namespaceURI, qualifiedName) para crear una instancia de la clase
SVGImageElement.filter de imageElement que se refiere al nombre de la URL de un atributo id en filterElement permite aplicar el efecto de filtro SVG a la imagen.imageElement a svgElement, puedes usar el método
AppendChild().<defs> y agréguelo al elemento <svg>:<defs> al elemento <svg>.<filter>, establezca un atributo id y agregue <filter> al elemento <defs>:filterElement.Id para el elemento <filter>, se puede aplicar a la imagen.<filter> al elemento <defs>.<feColorMatrix>, establezca atributos y agréguelo al elemento <filter>:name, value) para establecer los atributos type y values.in1. Utilice la propiedad del tipo SVGAnimatedLength, cuyos datos estáticos se pueden configurar o leer mediante la construcción feColorMatrixElement.In1.BaseVal = "SourceGraphic".<feColorMatrix> al elemento <filter>.El caso específico de las matrices de color es la rotación de la imagen a lo largo de la
rueda cromática. La operación type="hueRotate" se utiliza para cambiar el tono de color de una imagen o elemento. Con “hueRotate”, puede crear efectos de colores intensos y vívidos y personalizar la apariencia de los elementos de su sitio web. El hueRotate toma values: el ángulo de rotación en grados. Este ángulo indica el ángulo para girar la rueda de color. El valor puede estar entre 0 y 360, donde 0 y 360 representan el tono de color original y 180 representa una rotación de 180 grados (los colores se invierten).
El siguiente ejemplo de SVG ilustra el uso de la operación type="hueRotate" en la primitiva de filtro <feColorMatrix>:
1<defs>
2 <filter id="hueRotate">
3 <feColorMatrix in="SourceGraphic" type="hueRotate" values="150"></feColorMatrix>
4 </filter>
5</defs>El siguiente código C# crea una primitiva de filtro <feColorMatrix> y la agrega a un elemento SVG <filter> existente para aplicar un efecto hueRotate usando Aspose.SVG for .NET API. El efecto de rotación de tono cambia el tono del gráfico de entrada, cambiando efectivamente sus colores alrededor de la rueda de colores.
1 // Creating a <feColorMatrix> element and add to the <filter> element
2 var feColorMatrixElement = (SVGFEColorMatrixElement)document.CreateElementNS(SvgNamespace, "feColorMatrix");
3 feColorMatrixElement.In1.BaseVal = "SourceGraphic";
4 feColorMatrixElement.SetAttribute("type", "hueRotate");
5 feColorMatrixElement.SetAttribute("values", "150");
6 filterElement.AppendChild(feColorMatrixElement);Esta figura es una serie de imágenes con varios valores de atributo type. La figura muestra la imagen de origen (a), las imágenes procesadas por el filtro feColorMatrix, después de aplicar el efecto de saturación (b), hueRotate (c) y luminanceToAlpha (d).

<feComponentTransfer>La primitiva de filtro <feComponentTransfer> es un poderoso elemento SVG que le permite realizar operaciones lineales, tabulares y discretas con canales de imagen y cambiar la gamma de cada canal (RGBA). Esto permite varios ajustes y efectos de color, como cambios de contraste, corrección gamma, inversión de color, ajuste de brillo y más.
Por lo general, los subelementos <feFuncR>, <feFuncG>, <feFuncB> y <feFuncA> se utilizan con <feComponentTransfer>. Definen las funciones de transformación para los canales rojo, verde, azul y alfa, respectivamente, y pueden contener atributos como type, tableValues, slope, intercept, amplitude, exponent y offset que definen el comportamiento de la transformación. En el atributo type se determina el tipo de función que permite modificar este componente. Hay cinco tipos de funciones: identity, table, discrete, linear y gamma. Cuando type="linear", el atributo slope indica la pendiente de la función lineal. Si no se especifica el atributo, entonces el efecto es como si se especificara un valor de 1. Veamos un ejemplo de SVG:
1<svg xmlns="http://www.w3.org/2000/svg">
2 <image href="http://docs.aspose.com/svg/images/api/seaside.jpg" height="330" width="440" x="10" y="10" filter="url(#rgba)" />
3 <defs>
4 <filter id="rgba">
5 <feComponentTransfer>
6 <feFuncR type="linear" slope="1.1"/>
7 <feFuncG type="linear" slope="1.5"/>
8 <feFuncB type="linear" slope="2.0"/>
9 <feFuncA type="identity"/>
10 </feComponentTransfer>
11 </filter>
12 </defs>
13</svg>Aquí escribiremos código C# para crear el mismo efecto de transformación lineal del canal de imagen que en el código SVG anterior.
1using Aspose.Svg;
2using System.IO;
3using Aspose.Svg.Filters; 1// Apply RGBA component transfer filter to an <image> element in SVG programmatically
2
3// Set SVG Namespace Url
4string SvgNamespace = "http://www.w3.org/2000/svg";
5
6// Initialize an SVG document
7using (SVGDocument document = new SVGDocument())
8{
9 SVGSVGElement svgElement = document.RootElement;
10
11 // Create an <image> element and add it to the svgElement
12 SVGImageElement imageElement = (SVGImageElement)document.CreateElementNS(SvgNamespace, "image");
13 imageElement.Href.BaseVal = "http://docs.aspose.com/svg/images/api/seaside.jpg";
14 imageElement.Height.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
15 imageElement.Width.BaseVal.ConvertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX);
16 imageElement.Height.BaseVal.Value = 640;
17 imageElement.Width.BaseVal.Value = 480;
18 imageElement.X.BaseVal.Value = 20;
19 imageElement.Y.BaseVal.Value = 20;
20 imageElement.SetAttribute("filter", "url(#rgba)");
21 svgElement.AppendChild(imageElement);
22
23 // Create a <defs> element and add it to the <svg> element
24 SVGDefsElement defsElement = (SVGDefsElement)document.CreateElementNS(SvgNamespace, "defs");
25 svgElement.AppendChild(defsElement);
26
27 // Create a <filter> element and add it to the <defs> element
28 SVGFilterElement filterElement = (SVGFilterElement)document.CreateElementNS(SvgNamespace, "filter");
29 filterElement.Id = "rgba";
30 defsElement.AppendChild(filterElement);
31
32 // Create a <feComponentTransfer> element and add it to the <filter> element
33 SVGFEComponentTransferElement feComponentTransferElement = (SVGFEComponentTransferElement)document.CreateElementNS(SvgNamespace, "feComponentTransfer");
34 filterElement.AppendChild(feComponentTransferElement);
35
36 // Create a <feFuncR> element and add it to the <feComponentTransfer> element
37 SVGFEFuncRElement feFuncRElement = (SVGFEFuncRElement)document.CreateElementNS(SvgNamespace, "feFuncR");
38 feFuncRElement.SetAttribute("type", "linear");
39 feFuncRElement.SetAttribute("slope", "1.1");
40 feComponentTransferElement.AppendChild(feFuncRElement);
41
42 // Creating a <feFuncG> element and add it to the <feComponentTransfer> element
43 SVGFEFuncGElement feFuncGElement = (SVGFEFuncGElement)document.CreateElementNS(SvgNamespace, "feFuncG");
44 feFuncGElement.SetAttribute("type", "linear");
45 feFuncGElement.SetAttribute("slope", "1.5");
46 feComponentTransferElement.AppendChild(feFuncGElement);
47
48 // Create a <feFuncB> element and add it to the <feComponentTransfer> element
49 SVGFEFuncBElement feFuncBElement = (SVGFEFuncBElement)document.CreateElementNS(SvgNamespace, "feFuncB");
50 feFuncBElement.SetAttribute("type", "linear");
51 feFuncBElement.SetAttribute("slope", "2.0");
52 feComponentTransferElement.AppendChild(feFuncBElement);
53
54 // Create a <feFuncA> element and add it to the <feComponentTransfer> element
55 SVGFEFuncAElement feFuncAElement = (SVGFEFuncAElement)document.CreateElementNS(SvgNamespace, "feFuncA");
56 feFuncAElement.SetAttribute("type", "identity");
57 feComponentTransferElement.AppendChild(feFuncAElement);
58
59 // Save the document
60 document.Save(Path.Combine(OutputDir, "rgba.svg"));
61}La figura muestra la imagen de origen (a) y las imágenes procesadas por el filtro feComponentTransfer (b, c).

Ver también
Puede descargar los ejemplos completos 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.
Para obtener más información sobre las primitivas de filtro, consulte la página Módulo de efectos de filtro W3C y el artículo Filtros y degradados SVG.
Aspose.SVG ofrece Aplicaciones web SVG gratuitas para convertir archivos SVG o de imagen, fusionar SVG, vectorizar imágenes, generar sprites SVG, codificar datos SVG a Base64 y más. Estas aplicaciones en línea funcionan en cualquier sistema operativo con un navegador web y no requieren instalación de software adicional. ¡Es una manera rápida y fácil de resolver de manera eficiente y efectiva sus tareas relacionadas con SVG!
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.