mirror of https://github.com/ivanch/tcc.git
60 lines
2.1 KiB
C#
60 lines
2.1 KiB
C#
|
using ImageMagick;
|
|||
|
using Microsoft.AspNetCore.Mvc;
|
|||
|
|
|||
|
namespace tcc_app.Controllers
|
|||
|
{
|
|||
|
[ApiController]
|
|||
|
[Route("")]
|
|||
|
public class ImageController : ControllerBase
|
|||
|
{
|
|||
|
[HttpPost("blur")]
|
|||
|
public async Task<IActionResult> 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");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|