Масштабирование 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.

  1. Создайте экземпляр класса SVGDocument. Свойство RootElement указывает на корневой элемент <svg> документа.
  2. Создайте элемент <circle> и установите необходимые атрибуты.
    • Вы можете использовать метод CreateElementNS() для создания экземпляра класса SVGCircleElement.
    • Вызовите метод SetAttribute(), чтобы установить атрибуты, определяющие положение, размер, заливку и преобразование. Используйте функцию scale() для атрибута transform, который определяет преобразование масштабирования. В частности, scale(2) означает масштабирование элемента <circle> в 2 раза как по координатам x, так и по y.
  3. Чтобы добавить circleElement в svgElement, вы можете использовать метод AppendChild().
  4. Вызовите метод Save(), чтобы сохранить полученное изображение SVG в локальный файл.
1using Aspose.Svg;
2using System.IO;
 1// Scale an SVG circle using the transform attribute with Aspose.SVG
 2
 3// Create a new SVG document
 4using (SVGDocument document = new SVGDocument())
 5{
 6    SVGSVGElement svgElement = document.RootElement;
 7
 8    // Create a <circle> element and set its attributes
 9    SVGCircleElement circleElement = (SVGCircleElement)document.CreateElementNS("http://www.w3.org/2000/svg", "circle");
10    circleElement.Cx.BaseVal.Value = 150;
11    circleElement.Cy.BaseVal.Value = 150;
12    circleElement.R.BaseVal.Value = 50;
13    circleElement.SetAttribute("fill", "salmon");
14
15    // Apply scaling to the SVG circle
16    circleElement.SetAttribute("transform", "scale(2)");
17
18    // Append the <circle> element to the SVG
19    svgElement.AppendChild(circleElement);
20
21    // Save the document
22    document.Save(Path.Combine(OutputDir, "scale-circle.svg"));
23}
Example-SvgScaling.cs hosted with ❤ by GitHub

Матрица трансформации SVG – матрица масштабирования

Здесь мы рассмотрим пример C# для масштабирования всего изображения SVG, а не отдельного его элемента, и реализуем преобразование с использованием матрицы масштабирования. Давайте подробнее рассмотрим код C# для применения масштабной матрицы.

  1. Загрузите исходный файл SVG, используя один из конструкторов SVGDocument().
  2. Получите корневой элемент <svg> документа.
  1. Используйте метод GetCTM() класса SVGGraphicsElement, который возвращает текущую матрицу преобразования (CTM), связанную с элементом <svg>. CTM представляет совокупные преобразования, примененные к элементу, и включает информацию о перемещении, масштабировании, масштабировании и наклоне, которые можно применить к элементу.
  2. После получения CTM используйте метод Scale(), который выполняет преобразование масштаба после умножения текущей матрицы и возвращает результирующую матрицу. Метод Scale(scaleFactor) принимает только один аргумент – scaleFactor. Этот параметр является обязательным и представляет собой масштабирование по осям X и Y, которое вы хотите применить.
  3. Создайте transformAttribute – строковое представление двумерной матрицы преобразования, используя значения из модифицированной матрицы преобразования transformationMatrix. Матричное обозначение: matrix(a, b, c, d, e, f).
  4. Вызовите метод SetAttribute(), чтобы установить атрибут transform элемента <svg>, используя строку transformAttribute.
  5. Вызовите метод Save(), чтобы сохранить полученное изображение SVG в локальный файл.
1using Aspose.Svg;
2using System.IO;
 1// Combine multiple SVG transformations (scale, translate, and rotate) using a transformation matrix with Aspose.SVG
 2
 3// Load an SVG document
 4string documentPath = Path.Combine(DataDir, "snowflake.svg");
 5using (SVGDocument document = new SVGDocument(documentPath))
 6{
 7    SVGSVGElement svgElement = document.RootElement;
 8
 9    // Get the transformation matrix associated with the svgElement
10    SVGMatrix transformationMatrix = svgElement.GetCTM();
11    transformationMatrix = transformationMatrix.Scale(0.5F);
12
13    // Apply the transformation matrix to the svgElement
14    string transformAttribute = "matrix(" + transformationMatrix.A + "," + transformationMatrix.B + ","
15                                + transformationMatrix.C + "," + transformationMatrix.D + "," + transformationMatrix.E + ","
16                                + transformationMatrix.F + ")";
17    svgElement.SetAttribute("transform", transformAttribute);
18
19    // Save the document
20    document.Save(Path.Combine(OutputDir, "scale-snowflake.svg"));
21}

На следующем рисунке показаны исходный SVG (а) и масштабированное изображение с коэффициентом масштабирования 0,5 – уменьшенное изображение (b).

Текст «На рисунке показаны исходный SVG (a) и масштабированное изображение (b).»

Смотрите также

  • Вы можете скачать полные примеры и файлы данных с GitHub.
  • О загрузке с GitHub и запуске примеров вы узнаете из раздела Как запускать примеры.
  • Чтобы узнать, как использовать матрицу преобразования для поворота, масштабирования, перевода и наклона графики SVG, а также рассмотреть примеры кода SVG, перейдите к статье Матрица преобразования – примеры кода SVG.
  • Прочтите статью Преобразование SVG, чтобы узнать больше и получить примеры кода SVG для вращения, масштабирования, перемещения и наклона графики SVG с использованием transform атрибута SVG.
Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.