Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
В этой статье вы узнаете об основных цветовых фильтрах – <feColorMatrix> и <feComponentTransfer>. Здесь вы найдете примеры, показывающие, как писать код SVG для создания эффектов насыщенности, hueRotate и luminanceToAlpha, а также подробные примеры C# использования пространства имен
Aspose.Svg.Filters для применения цветовых фильтров к элементам SVG или растровые изображения.
Aspose.SVG for .NET позволяет создавать различные эффекты фильтров SVG, используя классы и интерфейсы, относящиеся к пространству имен
Aspose.Svg.Filters. Когда дело доходит до обработки цвета, лучшим вариантом является <feColorMatrix>. Это тип цветового фильтра, который использует матрицу для воздействия на значения цвета для каждого канала RGBA. <feComponentTransfer> – один из самых мощных примитивов фильтров SVG. Он дает контроль над отдельными каналами RGBA изображения, позволяя создавать эффекты SVG, подобные Photoshop; например, его можно использовать для постеризации изображений.
<feColorMatrix><feColorMatrix> – один из основных цветовых фильтров. Этот примитив фильтра применяет матричное преобразование к каналам RGBA каждого пикселя входного изображения. В результате создается новый набор значений цвета. В общем случае цветовая матрица записывается как операция атрибута type элемента <feColorMatrix>. В особых случаях цветовых матриц используются вспомогательные операции типа: saturate, hueRotate, luminanceToAlpha.
Эффект насыщенности – это частный случай использования цветовой матрицы. Давайте посмотрим примеры операции saturate, используемой в атрибуте type примитива фильтра <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>Приведенный выше код SVG иллюстрирует создание эффекта насыщенности и напоминает вам, что в SVG фильтр определяется элементом <filter>, который устанавливается внутри элемента <defs>. Он никогда не отображается сам по себе и концептуально описывается как элемент, включающий в себя дочерние элементы – примитивы фильтра.
Следующий код C# создает файл SVG с изображением с повышенной насыщенностью, благодаря чему цвета становятся более яркими. Эффект насыщенности достигается примитивом фильтра <feColorMatrix> со значениями, указанными в коде.
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}Рассмотрим код пошагово:
<svg>.<image> с атрибутами и добавьте его к элементу <svg>:namespaceURI, qualifiedName) для создания экземпляра
SVGImageElement класса.filter элемента imageElement, ссылающегося на URL-адрес атрибута id в filterElement, позволяет применить эффект фильтра SVG к изображению.imageElement к svgElement, вы можете использовать метод
AppendChild().<defs> и добавьте его к элементу <svg>:<defs> к элементу <svg>.<filter>, установите атрибут id и добавьте <filter> к элементу <defs>:filterElement.Id для элемента <filter>, его можно применить к изображению.<filter> к элементу <defs>.<feColorMatrix>, установите атрибуты и добавьте его к элементу <filter>:name, value), чтобы установить атрибуты type и values.in1. Используйте свойство типа SVGAnimatedLength, статические данные для которого можно задать или прочитать через конструкцию feColorMatrixElement.In1.BaseVal = "SourceGraphic".<feColorMatrix> к элементу <filter>.Конкретным случаем цветовых матриц является вращение изображения по
цветовому кругу. Операция type="hueRotate" используется для изменения цветового тона изображения или элемента. С помощью hueRotate вы можете создавать яркие, насыщенные цветовые эффекты и настраивать внешний вид элементов вашего веб-сайта. HueRotate принимает значение – угол поворота в градусах – это угол поворота цветового круга. Значение может находиться в диапазоне от 0 до 360, где 0 и 360 представляют исходный цветовой тон, а 180 представляет поворот на 180 градусов (цвета инвертируются).
Следующий пример SVG иллюстрирует использование операции type="hueRotate" в примитиве фильтра <feColorMatrix>:
1<defs>
2 <filter id="hueRotate">
3 <feColorMatrix in="SourceGraphic" type="hueRotate" values="150"></feColorMatrix>
4 </filter>
5</defs>Приведенный ниже код C# создает примитив фильтра <feColorMatrix> и добавляет его к существующему SVG-элементу <filter> для применения эффекта hueRotate с использованием Aspose.SVG for .NET API. Эффект вращения оттенка изменяет оттенок входного изображения, эффективно перемещая его цвета по цветовому кругу.
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);Этот рисунок представляет собой серию изображений с различными значениями атрибута type. На рисунке показано исходное изображение (а), изображения, обработанные фильтром feColorMatrix – после применения эффекта насыщенности (b), hueRotate (c) и luminanceToAlph (d).

<feComponentTransfer>Примитив фильтра <feComponentTransfer> – это мощный элемент SVG, который позволяет выполнять линейные, табличные, дискретные операции с каналами изображения и изменять гамму каждого канала (RGBA). Это позволяет выполнять различные настройки цвета и эффекты, такие как изменение контрастности, гамма-коррекция, инверсия цвета, регулировка яркости и многое другое.
Обычно подэлементы <feFuncR>, <feFuncG>, <feFuncB> и <feFuncA> используются с <feComponentTransfer>. Они определяют функции преобразования для красного, зеленого, синего и альфа-каналов соответственно и могут содержать такие атрибуты, как type, tableValues, slope, intercept, amplitude, exponent, и offset, которые определяют поведение преобразования. В атрибуте type определяется тип функции, позволяющей модифицировать данный компонент. Существует пять типов функций: identity, table, discrete, linear и gamma. Если type="linear", атрибут slope указывает наклон линейной функции. Если атрибут не указан, эффект будет таким же, как если бы было указано значение 1. Давайте посмотрим на пример 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>Здесь мы напишем код C# для создания того же эффекта линейного преобразования канала изображения, что и в приведенном выше коде SVG.
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}На рисунке показано исходное изображение (а) и изображения, обработанные фильтром feComponentTransfer (b, c).

Смотрите также
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.