Независимо от того, создаете ли вы веб-сайт, настольное или мобильное приложение, возможность манипулировать изображениями и рисовать на них является решающим аспектом при обработке и редактировании изображений. Чтобы предоставить разработчикам расширенные, но простые в реализации функции рисования, мы представляем Aspose.Imaging.Drawing, мощный API, разработанный для приложений C# .NET и предлагающий ряд функций рисования изображений.
- API рисования C# .NET
- Создание графики с использованием библиотеки рисования .NET
- Применить маскирование к изображениям
- Применить фильтры к изображениям
- Обрезка, поворот и изменение размера изображений
- Конвертируйте изображения в другие форматы
Библиотека чертежей C# .NET
Aspose.Imaging.Drawing — это надежный API, который позволяет обрабатывать растровые и векторные изображения с помощью передовых методов обработки изображений. Благодаря встроенному доступу к байтам API обеспечивает высокую скорость обработки при создании изображений или манипулировании ими. Используя API, вы можете рисовать объекты, манипулируя пикселями и графическими путями, а также конвертировать изображения из одного формата в другой. Aspose.Imaging.Drawing использует Aspose.Drawing в качестве графического движка по умолчанию, который представляет собой кроссплатформенную библиотеку 2D-графики, предлагающую полный набор функций для рисования текста, геометрии и изображений без каких-либо внешних зависимостей.
Вы можете загрузить и установить Aspose.Imaging.Drawing с сайта NuGet.
PM> NuGet\Install-Package Aspose.Imaging.Drawing
Давайте теперь рассмотрим некоторые существенные особенности этого API рисования .NET и их использование с помощью исходного кода.
Создание графики с использованием библиотеки рисования .NET
Aspose.Imaging.Drawing позволяет создавать изображения, рисуя различные объекты, такие как круги, линии, треугольники, квадраты и эллипсы. С помощью API вы можете создавать не только растровые изображения, но и векторные изображения. Давайте посмотрим, как рисовать растровые и векторные изображения на C# с помощью этого API рисования .NET.
Нарисовать растровое изображение
Ниже приведены шаги по рисованию растрового изображения с использованием API Aspose.Imaging.Drawing.
- Сначала создайте изображение нужного формата с помощью метода Image.Create().
- Затем создайте объект класса Graphics и инициализируйте его изображением, которое мы создали выше.
- Очистите поверхность изображения с помощью метода Graphics.Clear.
- Создайте новое перо и инициализируйте его нужным цветом.
- Нарисуйте эллипс (или любой другой графический объект) с помощью метода Graphics.DrawEllipse().
- Нарисуйте многоугольник, используя метод Graphics.FillPolygon().
- Наконец, сохраните изображение, используя метод Image.Save().
В следующем фрагменте кода показано, как нарисовать изображение на C#.
string outputFolder = @"Output\";
// Создайте экземпляр BmpOptions и установите его различные свойства.
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;
// Создайте экземпляр FileCreateSource и назначьте его свойству Source.
imageOptions.Source = new FileCreateSource(outputFolder + "result.bmp", false);
using (var image = Image.Create(imageOptions, 500, 500))
{
var graphics = new Graphics(image);
// Очистите поверхность изображения белым цветом и создайте и инициализируйте объект Pen синим цветом.
graphics.Clear(Color.White);
var pen = new Pen(Color.Blue);
// Нарисуйте эллипс, определив ограничивающий прямоугольник шириной 150 и высотой 100. Также нарисуйте многоугольник, используя LinearGradientBrush.
graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100));
using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f))
{
graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) });
}
// Сохранить изображение
image.Save();
}
Нарисовать векторное изображение
Подобно растровым изображениям, вы можете нарисовать векторную графику, например SVG, за несколько простых шагов. Давайте создадим векторное изображение, используя нашу библиотеку рисования C#.
- Сначала создайте объект MemoryStream.
- Затем загрузите изображение SVG.
- Растеризуйте SVG в PNG и запишите результат в поток.
- Загрузите изображение PNG из потока для дальнейшего рисования.
- Нарисуйте изображение PNG на существующем изображении SVG.
- Наконец, сохраните результаты.
В следующем фрагменте кода показано, как нарисовать векторное изображение на C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (MemoryStream drawnImageStream = new MemoryStream())
{
// Сначала растеризуйте Svg в Png и запишите результат в поток.
using (SvgImage svgImage = (SvgImage)Image.Load(templatesFolder + "template.svg"))
{
SvgRasterizationOptions rasterizationOptions = new SvgRasterizationOptions();
rasterizationOptions.PageSize = svgImage.Size;
PngOptions saveOptions = new PngOptions();
saveOptions.VectorRasterizationOptions = rasterizationOptions;
svgImage.Save(drawnImageStream, saveOptions);
// Теперь загрузите изображение PNG из потока для дальнейшего рисования.
drawnImageStream.Seek(0, System.IO.SeekOrigin.Begin);
using (RasterImage imageToDraw = (RasterImage)Image.Load(drawnImageStream))
{
// Рисование существующего изображения SVG.
Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D graphics = new Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D(svgImage);
// Уменьшите все нарисованное изображение в 2 раза и нарисуйте его в центре поверхности рисования.
int width = imageToDraw.Width / 2;
int height = imageToDraw.Height / 2;
Point origin = new Point((svgImage.Width - width) / 2, (svgImage.Height - height) / 2);
Size size = new Size(width, height);
graphics.DrawImage(imageToDraw, origin, size);
// Сохраните полученное изображение
using (SvgImage resultImage = graphics.EndRecording())
{
resultImage.Save(outputFolder + "vector_image.svg");
}
}
}
}
Применить маскирование к изображениям
Маскирование при редактировании изображений — это метод выборочного сокрытия или раскрытия определенных частей изображения. Он включает в себя создание маски, которая по сути представляет собой изображение в оттенках серого, определяющее прозрачность или непрозрачность каждого пикселя исходного изображения. Маскирование изображений широко практикуется для распознавания и диагностики.
Aspose.Image.Drawing предоставляет два метода применения маскировки изображения:
- Ручное маскирование. В качестве маски используется набор ROI. ROI для каждого среза используются для определения маски. Требуется дополнительный ввод пользователя.
- Автоматическое маскирование. Оно не требует от пользователя большого количества входных данных, но может быть не таким точным.
Давайте теперь посмотрим, как применять ручное и автоматическое маскирование изображений в коде C#.
Ручное маскирование изображения
В следующем фрагменте кода показано, как вручную применить маскирование к изображению в C#.
string outputFolder = @"Output\";
// Исходный файл
string sourceFileName = outputFolder + "couple.png";
// Создать графический путь
GraphicsPath manualMask = new GraphicsPath();
// Добавить фигуры
Figure firstFigure = new Figure();
firstFigure.AddShape(new EllipseShape(new RectangleF(100, 30, 40, 40)));
firstFigure.AddShape(new RectangleShape(new RectangleF(10, 200, 50, 30)));
// Добавить фигуру
manualMask.AddFigure(firstFigure);
GraphicsPath subPath = new GraphicsPath();
Figure secondFigure = new Figure();
secondFigure.AddShape(
new PolygonShape(
new PointF[]
{
new PointF(310, 100), new PointF(350, 200), new PointF(250, 200)
}, true));
secondFigure.AddShape(new PieShape(new RectangleF(10, 10, 80, 80), 30, 120));
subPath.AddFigure(secondFigure);
manualMask.AddPath(subPath);
// Применить маскировку
using (RasterImage image = (RasterImage)Image.Load(sourceFileName))
{
MaskingOptions maskingOptions = new MaskingOptions()
{
Method = SegmentationMethod.Manual,
Args = new ManualMaskingArgs
{
Mask = manualMask
},
Decompose = false,
ExportOptions =
new PngOptions()
{
ColorType = PngColorType.TruecolorWithAlpha,
Source = new StreamSource(new MemoryStream())
},
};
MaskingResult results = new ImageMasking(image).Decompose(maskingOptions);
// Сохранение окончательного результата маскировки.
using (RasterImage resultImage = (RasterImage)results[1].GetImage())
{
resultImage.Save(outputFolder + "manual_masking.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
}
}
Автоматическое маскирование изображения
В приведенном ниже фрагменте кода применяется автоматическое маскирование изображения с использованием API рисования .NET.
string outputFolder = @"Output\";
MaskingResult results;
using (RasterImage image = (RasterImage)Image.Load(outputFolder + "couple.jpg"))
{
// Чтобы использовать Graph Cut с автоматически рассчитанными штрихами, используется AutoMaskingGraphCutOptions.
AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions
{
// Указывает на то, что во время декомпозиции изображения следует выполнить новый расчет штрихов по умолчанию.
CalculateDefaultStrokes = true,
// Установка радиуса растушевки постобработки в зависимости от размера изображения.
FeatheringRadius = (Math.Max(image.Width, image.Height) / 500) + 1,
Method = SegmentationMethod.GraphCut,
Decompose = false,
ExportOptions =
new PngOptions()
{
ColorType = PngColorType.TruecolorWithAlpha,
Source = new FileCreateSource(outputFolder + "auto_masking.png")
},
BackgroundReplacementColor = Color.Transparent
};
results = new ImageMasking(image).Decompose(options);
using (RasterImage resultImage = (RasterImage)results[1].GetImage())
{
resultImage.Save(outputFolder + "auto_masking_2.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
}
}
Применить фильтры к изображениям
Применение фильтров к изображениям служит различным целям, и люди используют их по разным причинам, как практическим, так и художественным. Наиболее распространенные варианты использования фильтров изображений включают коррекцию цвета, улучшение качества изображения, применение специальных эффектов, подавление шума и т. д. Aspose.Imaging.Drawing поддерживает несколько типов фильтров, которые вы можете применять к изображениям, такие как медианный фильтр, фильтр движения, фильтр Гаусса и т. д.
Для демонстрации взгляните на следующий код, который применяет медианный фильтр к изображению с помощью Aspose.Imaging.Drawing.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Загрузите шумное изображение
using (Image image = Image.Load(templatesFolder + "template.gif"))
{
// Вставьте изображение в RasterImage.
RasterImage rasterImage = image as RasterImage;
if (rasterImage == null)
{
return;
}
// Создайте экземпляр класса MedianFilterOptions и задайте размер, примените фильтр MedianFilterOptions к объекту RasterImage и сохраните полученное изображение.
MedianFilterOptions options = new MedianFilterOptions(4);
rasterImage.Filter(image.Bounds, options);
// Сохранить изображение
image.Save(outputFolder + "median_filter.gif");
}
Обрезка, поворот и изменение размера изображений
Обрезка, поворот и изменение размера изображений считаются важными функциями приложений для редактирования изображений. Это наиболее распространенные операции обработки изображений, которые используются для манипулирования цифровыми изображениями. Давайте посмотрим, как обрезать, вращать и изменять размер изображений с помощью API Aspose.Imaging.Drawing.
Обрезать изображение
Чтобы обрезать изображение, вам необходимо указать значения смещения для всех четырех сторон изображения. На основании этих значений границы изображения смещаются к центру изображения. Следующий фрагмент кода C# обрезает изображение на основе предоставленных значений сдвига.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Загрузите существующее изображение в экземпляр класса RasterImage.
using (RasterImage rasterImage = (RasterImage)Image.Load(templatesFolder + "template.jpg"))
{
// Перед обрезкой изображение следует кэшировать для повышения производительности.
if (!rasterImage.IsCached)
{
rasterImage.CacheData();
}
// Определите значения смещения для всех четырех сторон
int leftShift = 10;
int rightShift = 10;
int topShift = 10;
int bottomShift = 10;
// На основе значений смещения примените обрезку к изображению. Метод обрезки сместит границы изображения к центру изображения и сохранит результаты на диск.
rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);
// Сохранить обрезанное изображение
rasterImage.Save(outputFolder + "cropped_image.jpg");
}
Поворот изображения
Чтобы повернуть изображение, Aspose.Imaging.Drawing предоставляет метод RotateFlip, который не только поворачивает изображение, но и переворачивает его (при необходимости). Вы можете выбрать желаемый вариант поворота и переворачивания из перечисления RotateFlipType. В следующем фрагменте кода показано, как повернуть изображение, но не перевернуть его в C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
// Загрузка и поворот изображения
using (var image = Image.Load(templatesFolder + "template.jpg"))
{
// Поворот изображения
image.RotateFlip(RotateFlipType.Rotate270FlipNone);
// Сохранить изображение
image.Save(outputFolder + "rotated_image.jpg");
}
Изменение размера изображения
Изменить размер изображения с помощью Aspose.Imaging.Drawing проще простого. Просто вызовите метод Resize и передайте новые значения высоты и ширины. В следующем фрагменте кода показано, как изменить размер изображения в C#.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (Image image = Image.Load(templatesFolder + "template.jpg"))
{
// Изменить размер изображения
image.Resize(300, 300);
// Сохранить изображение
image.Save(outputFolder + "resized_image.jpg");
}
Конвертируйте изображения в другие форматы
Чтобы преобразовать изображение с помощью API Aspose.Imaging.Drawing, вам нужно всего лишь загрузить изображение и сохранить его в нужном выходном формате. Следующий фрагмент кода преобразует изображение JPG в форматы WebP, PSD, PDF и TIFF.
string templatesFolder = @"Templates\";
string outputFolder = @"Output\";
using (var img = Aspose.Imaging.Image.Load(templatesFolder + "template.jpg"))
{
// Сохраняйте в разных форматах изображений
img.Save(outputFolder + "output.webp", new Aspose.Imaging.ImageOptions.WebPOptions());
img.Save(outputFolder + "output.psd ", new Aspose.Imaging.ImageOptions.PsdOptions());
img.Save(outputFolder + "output.tiff", new Aspose.Imaging.ImageOptions.TiffOptions(TiffExpectedFormat.Default));
// Сохранить как PDF
PdfOptions exportOptions = new PdfOptions();
exportOptions.PdfDocumentInfo = new Aspose.Imaging.FileFormats.Pdf.PdfDocumentInfo();
img.Save(outputFolder + "output.pdf", exportOptions);
}
Получите бесплатную лицензию API
Если вы хотите оценить Aspose.Imaging.Drawing API, вы можете получить бесплатную временную лицензию, которая позволит вам использовать API на полную мощность без каких-либо ограничений.
Заключение
В области обработки графики и изображений API Aspose.Imaging.Drawing выделяется как универсальный и мощный инструмент для разработчиков C# .NET. Если вы хотите улучшить визуальные элементы, исправить искажения изображения или преобразовать изображения между форматами, этот API предоставляет полный набор функций. С помощью Aspose.Imaging.Drawing манипулирование изображениями становится у вас под рукой, позволяя создавать привлекательную и визуально потрясающую графику программными средствами.
Дайте нам знать о ваших отзывах или вопросах на нашем форуме.