using ImageMagick; using Microsoft.AspNetCore.Mvc; namespace tcc_app.Controllers { [ApiController] [Route("")] public class ImageController : ControllerBase { [HttpPost("blur")] public async Task BlurImage() { MemoryStream mstream = new MemoryStream(); await HttpContext.Request.Body.CopyToAsync(mstream); var image = new MagickImage(new MemoryStream(mstream.ToArray())); var blurredImage = new MagickImage(image); var pixels = image.GetPixels(); var blurredPixels = blurredImage.GetPixelsUnsafe(); foreach (var pixel in pixels) { int x = pixel.X, y = pixel.Y; long rTotal = 0, gTotal = 0, bTotal = 0; int pixelCount = 0; for (short offsetY = -5; offsetY <= 5; offsetY++) { for (short offsetX = -5; offsetX <= 5; offsetX++) { int newX = x + offsetX; int newY = y + offsetY; if (newX >= 0 && newX < image.Width && newY >= 0 && newY < image.Height) { var pixelColor = pixels[newX, newY]; rTotal += pixelColor.GetChannel(0); gTotal += pixelColor.GetChannel(1); bTotal += pixelColor.GetChannel(2); pixelCount++; } } } blurredPixels[x, y].SetChannel(0, Convert.ToUInt16(rTotal / pixelCount)); blurredPixels[x, y].SetChannel(1, Convert.ToUInt16(gTotal / pixelCount)); blurredPixels[x, y].SetChannel(2, Convert.ToUInt16(bTotal / pixelCount)); } var blurredImageStream = new MemoryStream(); blurredImage.Write(blurredImageStream); blurredImageStream.Position = 0; return File(blurredImageStream, "image/png"); } } }