From 2390f8fb8d046b4f5aa12c1af80a1357e0fd2ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Henrique=20Ivanchechen?= Date: Sun, 20 Aug 2023 17:21:58 -0300 Subject: [PATCH] terminando .NET --- .gitignore | 3 ++- Controllers/ImageController.cs | 39 +++++++++++++++++++++++++++++++--- ImageHelper.cs | 16 ++++++++++++++ Program.cs | 8 +++++++ Services/ImageService.cs | 30 ++++++++++++++++++++++++-- 5 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 ImageHelper.cs diff --git a/.gitignore b/.gitignore index 5003052..93870c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .vs bin -obj \ No newline at end of file +obj +*.png \ No newline at end of file diff --git a/Controllers/ImageController.cs b/Controllers/ImageController.cs index 8b1c4eb..ffbd67e 100644 --- a/Controllers/ImageController.cs +++ b/Controllers/ImageController.cs @@ -4,7 +4,7 @@ using TCC.Services; namespace TCC.Controllers { [ApiController] - [Route("")] + [Route("image")] public class ImageController : ControllerBase { private ImageService ImageService { get; set; } @@ -16,13 +16,13 @@ namespace TCC.Controllers } [HttpPost("blur")] - public async Task BlurImage() + public async Task BlurImage([FromQuery] int radius) { MemoryStream mstream = new MemoryStream(); await HttpContext.Request.Body.CopyToAsync(mstream); mstream.Position = 0; - var result = ImageService.BoxBlurImage(mstream, 5); + var result = ImageService.BoxBlurImage(mstream, radius); var blurredImageStream = new MemoryStream(); result.Write(blurredImageStream); @@ -31,5 +31,38 @@ namespace TCC.Controllers return File(blurredImageStream, "image/png"); } + [HttpGet("load-image")] + public async Task GetSimpleImage() + { + var result = ImageService.GetSimpleImage(); + + var imageStream = new MemoryStream(); + result.Write(imageStream); + imageStream.Position = 0; + + return File(imageStream, "image/png"); + } + + [HttpGet("load-big-image")] + public async Task GetBigImage() + { + var result = ImageService.GetBigImage(); + + var imageStream = new MemoryStream(); + result.Write(imageStream); + imageStream.Position = 0; + + return File(imageStream, "image/png"); + } + + [HttpPost("save-big-image")] + public async Task SaveBigImage() + { + MemoryStream mstream = new MemoryStream(); + await HttpContext.Request.Body.CopyToAsync(mstream); + mstream.Position = 0; + + return Ok(); + } } } diff --git a/ImageHelper.cs b/ImageHelper.cs new file mode 100644 index 0000000..78aece5 --- /dev/null +++ b/ImageHelper.cs @@ -0,0 +1,16 @@ +using ImageMagick; + +namespace tcc_app +{ + public static class ImageHelper + { + public static MagickImage SimpleImage; + public static MagickImage BigImage; + + static ImageHelper() + { + SimpleImage = new MagickImage("simpleimage.png"); + BigImage = new MagickImage("bigimage.png"); + } + } +} diff --git a/Program.cs b/Program.cs index 15bc8a4..7c196b8 100644 --- a/Program.cs +++ b/Program.cs @@ -1,3 +1,5 @@ +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Server.Kestrel.Core; using TCC.Services; namespace TCC @@ -12,6 +14,12 @@ namespace TCC builder.Services.AddControllers(); + builder.Services.Configure(options => + { + options.Limits.MaxRequestBodySize = int.MaxValue; // if don't set default value is: 30 MB + }); + + var app = builder.Build(); app.MapControllers(); diff --git a/Services/ImageService.cs b/Services/ImageService.cs index 4ec4c5c..fbe3d02 100644 --- a/Services/ImageService.cs +++ b/Services/ImageService.cs @@ -1,4 +1,5 @@ using ImageMagick; +using tcc_app; namespace TCC.Services { @@ -10,6 +11,14 @@ namespace TCC.Services { var image = new MagickImage(imageStream); var blurredImage = new MagickImage(image); + + blurredImage = BoxBlurImageSeparable(image, blurredImage, radius, 0); + blurredImage = BoxBlurImageSeparable(image, blurredImage, 0, radius); + return blurredImage; + } + + private MagickImage BoxBlurImageSeparable(MagickImage image, MagickImage blurredImage, int radiusX, int radiusY) + { var pixels = image.GetPixels(); var blurredPixels = blurredImage.GetPixelsUnsafe(); @@ -20,9 +29,9 @@ namespace TCC.Services long rTotal = 0, gTotal = 0, bTotal = 0; int pixelCount = 0; - for (int offsetY = -radius; offsetY <= radius; offsetY++) + for (int offsetY = -radiusY; offsetY <= radiusY; offsetY++) { - for (int offsetX = -radius; offsetX <= radius; offsetX++) + for (int offsetX = -radiusX; offsetX <= radiusX; offsetX++) { int newX = x + offsetX; int newY = y + offsetY; @@ -45,5 +54,22 @@ namespace TCC.Services return blurredImage; } + + public void SaveImage(Stream fileStream) + { + var file = File.Create("image.png"); + fileStream.CopyToAsync(file); + file.Close(); + } + + public MagickImage GetSimpleImage() + { + return ImageHelper.SimpleImage; + } + + public MagickImage GetBigImage() + { + return ImageHelper.BigImage; + } } }