From a137b1a80b0cfda0ddf024c0c4699c767dd5b9b6 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Sat, 28 Mar 2020 18:16:06 +0300 Subject: [PATCH] Added badge image auto resizing on upload --- .../Admin/Controllers/BadgesController.cs | 24 ++++++++++++++----- .../Areas/Admin/Views/Badges/Index.cshtml | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/MyWebsite/MyWebsite/Areas/Admin/Controllers/BadgesController.cs b/MyWebsite/MyWebsite/Areas/Admin/Controllers/BadgesController.cs index da64573..b1e6a57 100644 --- a/MyWebsite/MyWebsite/Areas/Admin/Controllers/BadgesController.cs +++ b/MyWebsite/MyWebsite/Areas/Admin/Controllers/BadgesController.cs @@ -5,7 +5,9 @@ using MyWebsite.Controllers; using MyWebsite.Models; using MyWebsite.Models.Databases; using System; -using System.Globalization; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; using System.IO; using System.Linq; @@ -27,14 +29,24 @@ namespace MyWebsite.Areas.Admin.Controllers if (badgeImage == null) throw new ArgumentNullException(nameof(badgeImage)); - System.Drawing.Image image = System.Drawing.Image.FromStream(badgeImage.OpenReadStream()); + Image image = Image.FromStream(badgeImage.OpenReadStream()); + if (System.IO.File.Exists(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName)) ModelState.AddModelError("Error", $"Badge image with such name ({badgeImage.FileName}) is already esists"); - else if (image.Width != 64 || image.Height != 64 || !badgeImage.FileName.EndsWith(".PNG", true, CultureInfo.InvariantCulture)) - ModelState.AddModelError("Error", "The file must be EXACTLY 64x64 pixels PNG image"); + else if (image.Width < 64 || image.Width != image.Height || !badgeImage.FileName.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) + ModelState.AddModelError("Error", "The file must be PNG image with 1:1 aspect ratio and at least 64x64 pixels"); else - using (var stream = System.IO.File.Create(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName)) - badgeImage.CopyTo(stream); + { + using Bitmap resized = new Bitmap(64, 64); + using Graphics graphics = Graphics.FromImage(resized); + + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + graphics.CompositingMode = CompositingMode.SourceCopy; + graphics.DrawImage(image, 0, 0, 64, 64); + + using FileStream stream = System.IO.File.Create(Directory.GetCurrentDirectory() + "/wwwroot/images/Badges/" + badgeImage.FileName); + resized.Save(stream, ImageFormat.Png); + } return View(Database.Badges); } diff --git a/MyWebsite/MyWebsite/Areas/Admin/Views/Badges/Index.cshtml b/MyWebsite/MyWebsite/Areas/Admin/Views/Badges/Index.cshtml index e5621d5..4386484 100644 --- a/MyWebsite/MyWebsite/Areas/Admin/Views/Badges/Index.cshtml +++ b/MyWebsite/MyWebsite/Areas/Admin/Views/Badges/Index.cshtml @@ -62,7 +62,7 @@ - Note: Image should be exactly 64x64 pixels PNG file + Note: Image should PNG file with 1:1 aspect ratio and at least 64x64 pixels