Масштабирование SVG – SVG Scaling – C#
Как масштабировать SVG – код C#
Используя
Библиотеку Aspose.SVG for .NET, вы можете программно выполнить преобразование масштаба. В этой статье рассматриваются примеры C# для масштабирования SVG. Рассмотрены случаи использования функции scale()
в атрибуте transform
, а также матрицы преобразования — matrix(a,b,c,d,e,f).
Функция Scale()
Масштабирование (scale) – это преобразование SVG, которое увеличивает или уменьшает объект с использованием коэффициента масштабирования. Следует различать равномерное и направленное масштабирование. Функция трансформации scale(sx, sy)
позволяет масштабировать изображения по осям x и y. Значение коэффициента масштабирования sy
не является обязательным, и если оно опущено, предполагается, что оно равно sx
.
Следующий фрагмент кода C# демонстрирует, как создать элемент SVG <circle>
, установить его атрибуты и применить преобразование с помощью функции scale()
для атрибута transform
.
- Создайте экземпляр класса
SVGDocument. Свойство RootElement указывает на корневой элемент
<svg>
документа. - Создайте элемент
<circle>
и установите необходимые атрибуты.- Вы можете использовать метод CreateElementNS() для создания экземпляра класса SVGCircleElement.
- Вызовите метод
SetAttribute(), чтобы установить атрибуты, определяющие положение, размер, заливку и преобразование. Используйте функцию
scale()
для атрибутаtransform
, который определяет преобразование масштабирования. В частности,scale(2)
означает масштабирование элемента<circle>
в 2 раза как по координатам x, так и по y.
- Чтобы добавить
circleElement
вsvgElement
, вы можете использовать метод AppendChild(). - Вызовите метод Save(), чтобы сохранить полученное изображение SVG в локальный файл.
1using Aspose.Svg;
2using System.IO;
3...
4
5 // Create a new SVG document
6 using (var document = new SVGDocument())
7 {
8 var svgElement = document.RootElement;
9
10 // Create a rect element and set its attributes
11 var circleElement = (SVGCircleElement)document.CreateElementNS("http://www.w3.org/2000/svg", "circle");
12 circleElement.Cx.BaseVal.Value = 100;
13 circleElement.Cy.BaseVal.Value = 100;
14 circleElement.R.BaseVal.Value = 50;
15 circleElement.SetAttribute("fill", "salmon");
16
17 // Apply scaling to the SVG circle
18 circleElement.SetAttribute("transform", "scale(2)");
19
20 // Append the rect element to the SVG
21 svgElement.AppendChild(circleElement);
22
23 // Save the document
24 document.Save(Path.Combine(OutputDir, "scale-circle.svg"));
25 }
Матрица трансформации SVG – матрица масштабирования
Здесь мы рассмотрим пример C# для масштабирования всего изображения SVG, а не отдельного его элемента, и реализуем преобразование с использованием матрицы масштабирования. Давайте подробнее рассмотрим код C# для применения масштабной матрицы.
- Загрузите исходный файл SVG, используя один из конструкторов SVGDocument().
- Получите корневой элемент
<svg>
документа.
- Примечание. Чтобы применить какое-либо преобразование ко всему SVG-изображению, вам необходимо применить атрибут
transform
к корневому элементу<svg>
.
- Используйте метод
GetCTM() класса SVGGraphicsElement, который возвращает текущую матрицу преобразования (CTM), связанную с элементом
<svg>
. CTM представляет совокупные преобразования, примененные к элементу, и включает информацию о перемещении, масштабировании, масштабировании и наклоне, которые можно применить к элементу. - После получения CTM используйте метод
Scale(), который выполняет преобразование масштаба после умножения текущей матрицы и возвращает результирующую матрицу. Метод
Scale(scaleFactor)
принимает только один аргумент –scaleFactor
. Этот параметр является обязательным и представляет собой масштабирование по осям X и Y, которое вы хотите применить. - Создайте
transformAttribute
– строковое представление двумерной матрицы преобразования, используя значения из модифицированной матрицы преобразованияtransformationMatrix
. Матричное обозначение: matrix(a, b, c, d, e, f). - Вызовите метод
SetAttribute(), чтобы установить атрибут
transform
элемента<svg>
, используя строкуtransformAttribute
. - Вызовите метод Save(), чтобы сохранить полученное изображение SVG в локальный файл.
1using Aspose.Svg;
2using System.IO;
3...
4
5 // Load an SVG document
6 string documentPath = Path.Combine(DataDir, "snowflake.svg");
7
8 using (var document = new SVGDocument(documentPath))
9 {
10 var svgElement = document.RootElement;
11
12 // Get the transformation matrix associated with the svgElement
13 var transformationMatrix = svgElement.GetCTM();
14 transformationMatrix = transformationMatrix.Scale(0.5F);
15
16 // Apply the transformation matrix to the svgElement
17 var transformAttribute = "matrix(" + transformationMatrix.A + "," + transformationMatrix.B + ","
18 + transformationMatrix.C + "," + transformationMatrix.D + "," + transformationMatrix.E + ","
19 + transformationMatrix.F + ")";
20 svgElement.SetAttribute("transform", transformAttribute);
21
22 // Save the document
23 document.Save(Path.Combine(OutputDir, "scale-svg.svg"));
24 }
На следующем рисунке показаны исходный SVG (а) и масштабированное изображение с коэффициентом масштабирования 0,5 – уменьшенное изображение (b).
Смотрите также
- Вы можете скачать полные примеры и файлы данных с
GitHub.
- О загрузке с GitHub и запуске примеров вы узнаете из раздела
Как запускать примеры.
- Чтобы узнать, как использовать матрицу преобразования для поворота, масштабирования, перевода и наклона графики SVG, а также рассмотреть примеры кода SVG, перейдите к статье
Матрица преобразования – примеры кода SVG.
- Прочтите статью
Преобразование SVG, чтобы узнать больше и получить примеры кода SVG для вращения, масштабирования, перемещения и наклона графики SVG с использованием
transform
атрибута SVG.